Can't append to array using string field name [$] when performing update on array fields
Asked Answered
D

1

6

rowsI am attempting to perform a mongodb update on each field in an array of records.

An example schema is below:

{
    "_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
        }
    ]
}

So far I have been able to perform single updates like this:

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

However, I am struggling as to how to perform an update that will update all array records to a status_id of 1 (for instance).

Below is how I imagine it should work:

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

However I get the error:

can't append to array using string field name [$]

I have tried for quite a while with no luck. Any pointers?

Doornail answered 23/10, 2012 at 22:31 Comment(0)
M
6

You can't do the sort of 'wildcard' update of array elements that you're looking for. I think the best you can do is simultaneously set each element's status_id value like this:

db.mycollection.update(
    {"uid":"ABCDEF"},
    {$set:{
        "rows.0.status_id":1,
        "rows.1.status_id":1
    }}, false, true);
Meerschaum answered 23/10, 2012 at 23:7 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.