Mongodb找到并插入

时间:2015-10-01 14:59:19

标签: mongodb

我想:

1)找到文件

2)每个找到的文件都包含一个数组,我想在数组中插入一个新的数组元素。如果数组元素已经存在,则不执行任何操作(不要在数组中插入新元素)。

我玩聚合但是我似乎找不到插入函数?

数据:

{
    "_id" : ObjectId("560c24b853b558856ef193a4"),
    "name" : "ирина",
    "pic" : "",
    "language" : ObjectId("560c24b853b558856ef193a2"),
    "cell" : 1,
    "local" : {
        "email" : "ирина@mail.com",
        "password" : "12345"
    },
    "sessions" : [ // <--- this is the array I would like to insert a new element into
        {
            "id" : ObjectId("560c24b853b558856ef193a5")
        }
    ]
}

插入:

        yield new Promise(function (resolve, reject) {
            users.col.aggregate([
                    {
                        $match: {
                            'cell': socket.cell
                        }
                    },
                    {
                        // <--- insert here?
                    }
                ],
                function (err, res) {
                    if (err === null)
                        resolve(res);
                    reject(err);
                });
        });

更新

尝试以下也不愿意插入:/

yield new Promise(function (resolve, reject) {
    var bulk = users.col.initializeUnorderedBulkOp();
bulk.find({
        cell: 1
    }).update({
        $addToSet: {
            sessions: {
                id: 'test'
            }
        }
    });
    bulk.execute(function (err, res) {
        console.log(res);
        resolve(res);
    });
});

3 个答案:

答案 0 :(得分:1)

如user3100115所述,您应该按如下方式使用更新:

db.collection.update({cell:1},{$addToSet:{sessions:{id: 'test'}}},{multi:true})

答案 1 :(得分:1)

使用合作僧侣:

yield users.update({
    cell: 1
}, {
    $addToSet: {
        sessions: {
            id: 'test'
        }
    }
}, {
    multi: true
});

答案 2 :(得分:0)

您可以使用批量操作,尤其是Bulk.find并进行更新。至于添加唯一值,您可以使用$addToSet

my_object