Thanh Tùng
Thanh Tùng

Reputation: 123

How to push new field in array mongodb

Imagine I have database like

{
    "_id" : ObjectId("594994d1ab6c161168aa5969"),
    "user_id" : ObjectId("594994d1ab6c161168aa5968"),
    "active" : [ 
        {
            "type" : "active"
        }, 
        {
            "type" : "inactive"
        }
    ]
}

I want add to first object in active array . Here is result I expected

{
    "_id" : ObjectId("594994d1ab6c161168aa5969"),
    "user_id" : ObjectId("594994d1ab6c161168aa5968"),
    "active" : [ 
        {
            "type" : "active",
            "note": [{
                            content: 'here is content',
                            title : ' here is title'
                        }]
        }, 
        {
            "type" : "inactive"
        }
    ]
}

Here is code I tried

db.collection('..').update({'user_id' : ObjectId(userId)} ,
{$push:{ "active.0": "note": [{
                              content: 'here is content',
                                title : ' here is title'
                        }]  } )

But I get The field 'active.0' must be an array but is of type object in document . Where is my wrong ? Please help

Upvotes: 1

Views: 858

Answers (1)

Neil Lunn
Neil Lunn

Reputation: 151112

Starting with your document like this:

{
    "_id" : ObjectId("594994d1ab6c161168aa5969"),
    "user_id" : ObjectId("594994d1ab6c161168aa5968"),
    "active" : [ 
        {
            "type" : "active"
        }, 
        {
            "type" : "inactive"
        }
    ]
}

You run the $push like this:

db.collection.update(
  { "_id" : ObjectId("594994d1ab6c161168aa5969") },
  { "$push":{ "active.0.note": { content: 'here is content', title : ' here is title' } } }
)

Which creates the new array within the first element like so:

{
        "_id" : ObjectId("594994d1ab6c161168aa5969"),
        "user_id" : ObjectId("594994d1ab6c161168aa5968"),
        "active" : [
                {
                        "type" : "active",
                        "note" : [
                                {
                                        "content" : "here is content",
                                        "title" : " here is title"
                                }
                        ]
                },
                {
                        "type" : "inactive"
                }
        ]
}

Everything here is cut and paste from my shell.

Upvotes: 2

Related Questions