![](/img/trans.png)
[英]How to move document from one collections to another? Mongoose, MongoDB
[英]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.