MongoDB:如何为集合中的每个文档设置一个新字段,使其等于另一个字段的值?

4

我需要运行一个迁移脚本,将一个值(已经在每个文档中可用)插入到同一文档的数组中。这必须针对我的集合中的每个文档执行(不需要选择查询)。

如何更改:

{
    "_id": ObjectID("5649a7f1184ebc59094bd8b3"),
    "alternativeOrganizer": ObjectID("5649a7f1184ebc59094bd8b1"),
    "myArray": []
}

转换为:

{
    "_id": ObjectID("5649a7f1184ebc59094bd8b3"),
    "alternativeOrganizer": ObjectID("5649a7f1184ebc59094bd8b3"),
    "myArray": [
         ObjectID("5649a7f1184ebc59094bd8b3")
    ]
}

非常感谢你,提前致以感谢。


2
请问下面的解决方案有什么问题吗?是我理解错了吗?我的理解是您想要按照所述更新现有记录到样本中? - notionquest
谁在给我点踩,请能否解释一下?回答有什么问题吗?仅仅点踩并不能帮助我们。 - Shrabanee
1
db.s.find().forEach(function(obj){var id = obj._id;db.s.update({_id:id},{"$push":{"myArray":id}})}) - Ishan Soni
1个回答

13

我会使用 forEach$addToSet,以便脚本可以重新执行。

$addToSet 运算符将一个值添加到数组中,除非该值已经存在,如果该值已经存在,则 $addToSet 不对该数组做任何操作。

db.collectionname.find().forEach(function(results)
{    
    print( "Id: " + results._id );
    db.collectionname.update( {_id : results._id},
                       {$addToSet : {myArray : results._id}})
});

正是我所需要的。谢谢。 - franchez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接