在阵列领域进行更新时使用字符串字段名称[$]无法追加到数组(Can't append to

2019-07-02 10:41发布

rowsI在尝试中的记录的阵列上的每个字段进行更新的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)

不过,我奋力至于如何执行,将更新所有阵列记录到的更新status_id 1(例如)。

下面是我想象它应该工作:

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

但是我得到的错误:

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

我已经试过了,没有运气好一阵子。 任何指针?

Answer 1:

你不能做的那种你正在寻找的数组元素的“通配符”的更新。 我想,你能做的就是同时设定每个元素的最佳status_id值是这样的:

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


文章来源: Can't append to array using string field name [$] when performing update on array fields