簡體   English   中英

Mongodb找到並插入

[英]Mongodb find and insert

我想要:

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);
    });
});

如user3100115所述,您應該使用如下更新:

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

使用共同僧侶:

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

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

var bulk = db.items.initializeUnorderedBulkOp();
bulk.find({cell: socket.cell}).update({$addToSet: {sessions: id}});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM