MongoDB:如何为集合中的每个文档设置一个等于另一个字段值的新字段[重复]
Posted
技术标签:
【中文标题】MongoDB:如何为集合中的每个文档设置一个等于另一个字段值的新字段[重复]【英文标题】:MongoDB : how to set a new field equal to the value of another field, for every document in a collection [duplicate] 【发布时间】:2016-12-26 10:44:18 【问题描述】:我需要运行一个迁移脚本来将一个值(每个文档中已经存在)插入到同一个文档的数组中。必须对我收藏的每个文档都执行此操作(无需选择查询)
如何更改:
"_id": ObjectID("5649a7f1184ebc59094bd8b3"),
"alternativeOrganizer": ObjectID("5649a7f1184ebc59094bd8b1"),
"myArray": []
进入这个:
"_id": ObjectID("5649a7f1184ebc59094bd8b3"),
"alternativeOrganizer": ObjectID("5649a7f1184ebc59094bd8b3"),
"myArray": [
ObjectID("5649a7f1184ebc59094bd8b3")
]
提前致谢。
【问题讨论】:
我可以知道以下解决方案中的问题是什么吗?我理解错了吗?我的理解是您想将现有记录更新到上述示例中? 谁投了反对票,你能解释一下吗?答案有什么问题?只有反对票对我们没有帮助。 db.s.find().forEach(function(obj)var id = obj._id;db.s.update(_id:id,"$push":" myArray":id)) 【参考方案1】:我会使用 forEach 和 $addToSet,以便脚本可以重新执行。
$addToSet 运算符向数组添加一个值,除非该值是 已经存在,在这种情况下 $addToSet 对该数组不做任何事情。
db.collectionname.find().forEach(function(results)
print( "Id: " + results._id );
db.collectionname.update( _id : results._id,
$addToSet : myArray : results._id)
);
【讨论】:
正是我需要的。谢谢。以上是关于MongoDB:如何为集合中的每个文档设置一个等于另一个字段值的新字段[重复]的主要内容,如果未能解决你的问题,请参考以下文章