在嵌套数组mongodb nodejs中插入对象

时间:2015-04-13 20:04:46

标签: arrays node.js mongodb nested

所以我试图在参数中插入一个对象并且不成功。我的mongodb结构如下所示:

[
    {
        "_id": "04",
        "name": "test service 4",
        "id": "04",
        "version": "0.0.1",
        "title": "testing",
        "description": "test",
        "protocol": "test",
        "operations": [
            {
                "_id": "99",
                "oName": "test op 52222222222",
                "sid": "04",
                "name": "test op 52222222222",
                "oid": "99",
                "parameters": {},
                "description": "testing",
                "returntype": "test"
            },
            {
                "_id": "58",
                "oName": "test op 52222222222",
                "sid": "04",
                "name": "test op 52222222222",
                "oid": "58",
                "parameters": {},
                "description": "testing",
                "returntype": "test"
            }
        ]
    }
]

我希望能够将对象添加到具有基本详细信息(如name,id和type)的参数中。我不完全确定如何解决这个问题,因为我已经实现了所有其他CRUD操作,直到参数部分。我该怎么做呢?我知道mongodb在尝试将某些东西插入数组内的数组时会遇到问题,所以如果有人对我如何完成这一点有任何建议,我会非常感激。感谢。

其中一个问题是我无权访问根对象的_id,但我确实有_id用于插入参数的操作。因此我试图使用以下代码插入参数:

collection.update({"operations":{"$elemMatch": {"oid": oid}}}, {'$addToSet':{"operations.parameters":  {name: "test"} }}, {safe:true}, function(err, result) {
        if (err) {
            res.send({'error':'An error has occurred'});
        } else {
            res.send(result[0]);
        }
    });

但这不起作用。

2 个答案:

答案 0 :(得分:3)

我可以使用以下代码完成插入:

collection.update({ "operations": {$elemMatch: {_id:oid}}}, {$addToSet: { "operations.$.parameters" : parameter}}, function(err, result) {
        if (err) {
            res.send({'error':'An error has occurred'});
        } else {
            res.send(result[0]);
        }
});

万一有人需要它。

答案 1 :(得分:-1)

这是因为您需要使用positional operator,我从链接中复制的示例几乎与您的情况相同:

db.students.update(
   { _id: 4, "grades.grade": 85 },
   { $set: { "grades.$.std" : 6 } }
)