【问题标题】:MongoDB help needed to update array更新数组需要 MongoDB 帮助
【发布时间】:2013-02-15 17:58:49
【问题描述】:

我有这些文档在一个集合中

{
   _id: 1,
   name: 'xpto',
   arr: [1, 2, 3]
},
{
  _id: 2,
  name: 'xyz'
}

我希望 addToSet 编号 4 使用更新 {multi: 1} 进行 arr,但出现错误“无法将 $addToSet 修饰符应用于非数组。”。 我知道这是因为我的第二个文档没有 arr 字段。

当数组不在所有文档中时,是否可以使用 $push 和/或 $addtoset 使用更新命令更新数组?

我用 find 来做,寻找 cursor.arr 并在不存在的情况下创建数组。

你知道另一种方法吗?

【问题讨论】:

  • $addToSet 将为不存在的文档创建 arr 字段,因此可能发生的情况是您有一个文档,其中 arr 存在但不是数组。

标签: javascript arrays mongodb


【解决方案1】:

如果您只需要 第一个文档 中的 update 数组,您可以使用 $push 运算符,如下所示:

db.docs.update({_id:1},{$push:{arr:4}});

如果您需要更新两个文档,您也可以使用 $push,但第一个参数中的值为空:

db.docs.update({}, {$push:{arr:4}});

结果将是: *{"_id":1, "arr":[1,2,3,4], "name":"xpto"} {"_id":2, "arr":[4], "name":"xyz"}*

【讨论】:

  • 要更新这两个文档,我不能使用推送。当我执行这个命令 {"_id":1, "arr":[1,2,3,4], "name":"xpto"} {"_id":2, "arr":[4], " name":"xyz"}, {multi: 1} "我无法将 $push 修饰符应用于非数组。" $addToSet 同样的问题,如果你不使用 multi:1 MongoDb 只更新第一个文档。
猜你喜欢
  • 2023-04-04
  • 2016-02-20
  • 1970-01-01
  • 2015-11-14
  • 2021-08-02
  • 1970-01-01
  • 1970-01-01
  • 2013-12-06
  • 2021-01-22
相关资源
最近更新 更多