【问题标题】:Can't append to array using string field name [$] when performing update on array fields对数组字段执行更新时,无法使用字符串字段名称 [$] 追加到数组
【发布时间】:2012-10-23 22:31:15
【问题描述】:

rows我正在尝试对记录数组中的每个字段执行 mongodb 更新。

示例架构如下:

{
    "_id" : ObjectId("508710f16dc636ec07000022"),
    "summary" : "",
    "uid" : "ABCDEF",
    "username" : "bigcheese",
    "name" : "Name of this document",
    "status_id" : 0,
    "rows" : [
        {
            "score" : 12,
            "status_id" : 0,
            "uid" : 1
        },
        {
            "score" : 51,
            "status_id" : 0,
            "uid" : 2
        }
    ]
}

到目前为止,我已经能够像这样执行单个更新:

db.mycollection.update({"uid":"ABCDEF","rows.uid":1}, {$set:{"rows.$.status_id":1}},false,false)

但是,我正在苦苦思索如何执行更新,将所有数组记录更新为 1 的 status_id(例如)。

以下是我想象的应该如何工作:

db.mycollection.update({"uid":"ABCDEF"}, {$set:{"rows.$.status_id":1}},false,true)

但是我得到了错误:

不能使用字符串字段名 [$] 追加到数组

我已经尝试了很长时间,但没有运气。有什么指点吗?

【问题讨论】:

    标签: mongodb mongodb-update


    【解决方案1】:

    您不能对您正在寻找的数组元素进行那种“通配符”更新。我认为你能做的最好的就是同时设置每个元素的 status_id 值,如下所示:

    db.mycollection.update(
        {"uid":"ABCDEF"},
        {$set:{
            "rows.0.status_id":1,
            "rows.1.status_id":1
        }}, false, true);
    

    【讨论】:

      猜你喜欢
      • 2015-02-18
      • 2015-01-06
      • 1970-01-01
      • 1970-01-01
      • 2018-10-05
      • 2012-12-17
      • 2016-08-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多