在mongodb中的对象数组内的对象数组中添加新对象

时间:2016-08-23 12:39:57

标签: arrays mongodb

考虑到以下不好的模型,因为我对此完全陌生。

{
    "uid": "some-id",
    "database": {
        "name": "nameOfDatabase",
        "collection": [
            {
                "name": "nameOfCollection",
                "fields": {
                    "0": "field_1",
                    "1": "field_2"
                }
            },
            {
                "name": "nameOfAnotherCollection",
                "fields": {
                    "0": "field_1"
                }
            }
        ]
    }
}

我有集合名称(即database.collection.name),我有一些字段要添加到它或从中删除(在database.collection.fields下有一些已存在的字段,我想添加新的或删除现有的。)

简而言之,当我拥有数据库名称和集合名称时,如何更新/删除"字段"。

我无法弄清楚如何在这种情况下使用位置运算符$。

使用mongoose更新

Model.update(conditions, updates, options, callback);

我不知道哪些是正确的conditions和正确的updates参数。

到目前为止,我没有成功使用下面的model.update

conditions = {
    "uid": req.body.uid,
    "database.name": "test",
    "database.collection":{ $elemMatch:{"name":req.body.collection.name}}
};
updates = {
    $set: {
        "fields": req.body.collection.fields
    }
};

---------------------------------------------------------

conditions = {
    "uid": req.body.uid,
    "database.name": "test",
    "database.collection.$.name":req.body.collection.name
};
updates = {
    $addToSet: {
        "fields": req.body.collection.fields
    }
};

我尝试了很多,但没有一个工作,因为我是全新的。 我在$ push,$ set,$ addToSet,什么不使用什么?之间感到困惑,怎么样?

原始模式应该如下所示,但对其进行查询变得越来越难。

{
    "uid": "some-id",
    "database": [
        { //array of database objects
            "name": "nameOfDatabase",
            "collection": [ //array of collection objects inside respective databases
                {
                    "name": "nameOfCollection",
                    "fields": { //fields inside a this particular collection
                        "0": "field_1",
                        "1": "field_2"
                    }
                }
            ]
        }
    ]
}

0 个答案:

没有答案