我需要运行一个迁移脚本,将一个值(已在每个文档中提供)插入到同一文档的数组中。必须对我的集合中的每个文档(不需要选择查询)进行此操作
如何更改:
{
"_id": ObjectID("5649a7f1184ebc59094bd8b3"),
"alternativeOrganizer": ObjectID("5649a7f1184ebc59094bd8b1"),
"myArray": []
}
进入这个:
{
"_id": ObjectID("5649a7f1184ebc59094bd8b3"),
"alternativeOrganizer": ObjectID("5649a7f1184ebc59094bd8b3"),
"myArray": [
ObjectID("5649a7f1184ebc59094bd8b3")
]
}
提前致谢。
答案 0 :(得分:7)
我会使用 forEach 和 $ addToSet ,以便脚本可以重新执行。
$ addToSet运算符向数组添加值,除非值为 已存在,在这种情况下,$ addToSet对该数组不执行任何操作。
db.collectionname.find().forEach(function(results)
{
print( "Id: " + results._id );
db.collectionname.update( {_id : results._id},
{$addToSet : {myArray : results._id}})
});