繁体   English   中英

MongoDB将ObjectId从一个字段移动到另一个字段

[英]MongoDB move ObjectId from one field to another

问题

我有一个ObjectId保存在字段-incomingFriendRequests-中,我想将其移动到另一个字段-friends-中。

有没有比将它从ReceivedFriendRequests中删除然后再执行一次findOneAndUpdate并将其添加到朋友更好的方法呢? 我觉得这可以通过一个数据库调用而不是两个数据库调用来完成。

猫鼬模型:

const userSchema = mongoose.Schema({ 
  friends: [{
    type: mongoose.Schema.Types.ObjectId, ref: 'User', require: false
  }],
  incomingFriendRequests:[{
    type: mongoose.Schema.Types.ObjectId, ref: 'User', require: false
  }],
  online: {type: Boolean, require: true}
});

将值从一个字段移动到另一个字段肯定需要进行n +1次调用才能进行转换。 这可以通过使用

find({}).forEach(function(doc) {
  // your doc update
  doc.save();
});

或者,您甚至可以执行批量写入。

如果您的目标是删除该列incomingFriendRequests,则可以将该列重命名为好友,而不是复制所有数据。

update({}, { $rename: {incomingFriendRequests: friends }});

在单个查询中是不可能的,您需要首先在入局好友请求字段上执行$ pull以删除所选的objectId,然后需要对好友执行另一个更新查询以添加所选的objectId。 另外,您可以使用$ addToSet来防止重复ID。 如果在这种情况下使用$ push进行添加,则还会存储重复的objectId。

查询:

1)删除:-db.getCollection('testdata')。update({id:ObjectId('5cc3fa66a04275096417f9ca')},{“ $ pull”:{“ incomingFriendRequests”:“ 5cc3fa66a04275096417f9da”}}}));;

2)添加:-db.getCollection('testdata')。update({id:ObjectId('5cc3fa66a04275096417f9ca')},{“ $ addToSet”:{“ friends”:“ 5cc3fa66a04275096417f9da”}});; //也可以使用$ push

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM