1
{
    "__v" : 2,
    "_id" : ObjectId("54dc4fd10ac1f6a066a0646c"),
    "desc" : "test1",
    "lists" : [ 
        {
            "index" : 1,
            "text" : "__point",
            "_id" : ObjectId("54dc4fda0ac1f6a066a0646d"),
            "createdAt" : ISODate("2015-02-12T07:01:46.390Z")
        }, 
        {
            "index" : 2,
            "text" : "__point",
            "_id" : ObjectId("54dc4fdd0ac1f6a066a0646e"),
            "createdAt" : ISODate("2015-02-12T07:01:49.668Z")
        }
    ],
    "name" : "test" }

The test array looks like this. i want to add 'category' field and add value '0' in lists checking _id.

i tried

$collection->update(array('_id' => new MongoId("54dc4fd10ac1f6a066a0646c")),array('$set' => array(new MongoId("54dc4fda0ac1f6a066a0646d").".lists.category" => '0')));

like this but it doesn't work.

1

2 Answers 2

0
set third parameter of update to true.
i think there is some problem in finding which embedded document for updated.
try this one might be work.
$collection->update(array('_id' => new MongoId("54dc4fd10ac1f6a066a0646c"), 'lists._id' => "54dc4fda0ac1f6a066a0646d"), array('$set' => array("lists.$.category" => '0')), true);
Sign up to request clarification or add additional context in comments.

Comments

0

Hi I don't know more about PHP but you can do this from following script

    db.collectionName.find({
    "lists": {
    "$exists": true
    }
}).forEach(function(data){
    for(vari=0;i<data.lists.length;i++){
    db.collectionName.update({
        "_id": data._id,
        "lists.index": data.lists[
            i
        ].index
    },
    {
        "$set": {
            "lists.$.category": 0
        }
    },
    true,
    true);
    }
})

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.