如何在数组mongodb中推送新字段

时间:2017-06-20 08:10:10

标签: node.js mongodb

想象一下,我有像

这样的数据库
{
    "_id" : ObjectId("594994d1ab6c161168aa5969"),
    "user_id" : ObjectId("594994d1ab6c161168aa5968"),
    "active" : [ 
        {
            "type" : "active"
        }, 
        {
            "type" : "inactive"
        }
    ]
}

我想在活动数组中添加第一个对象。这是我预期的结果

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

这是我试过的代码

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

但我得The field 'active.0' must be an array but is of type object in document。我哪里错了?请帮忙

1 个答案:

答案 0 :(得分:1)

从您的文档开始:

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

你像这样运行$push

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

在第一个元素中创建新数组,如下所示:

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

这里的所有东西都是从我的外壳上剪下来的。