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:如何为集合中的每个文档设置一个等于另一个字段值的新字段[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何为 MongoDB 中的嵌入式文档创建唯一 ID?

如何为 Spring Data 中的类配置 MongoDb 集合名称

如何为子文档创建 mongoDb 架构

如何为嵌套在数组中的文档中的字段设置唯一约束?

MongoDB 删除文档

如何匹配 MongoDB 中的子文档数组?