【问题标题】:MongoDB : how to set a new field equal to the value of another field, for every document in a collection [duplicate]MongoDB:如何为集合中的每个文档设置一个等于另一个字段值的新字段[重复]
【发布时间】: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}})})

标签: mongodb mongodb-query


【解决方案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}})
});

【讨论】:

  • 正是我需要的。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-20
  • 1970-01-01
  • 2023-02-11
  • 1970-01-01
  • 2011-02-06
  • 1970-01-01
  • 2018-02-07
相关资源
最近更新 更多