Mongodb查找和插入

3

我希望:

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

这里只需要一个简单的update就可以了。 - styvane
@user3100115 像 $match 一样,但是 $update - basickarl
你真的不需要汇总或者批量操作,这里很简单。 - styvane
@user3100115,我已经阅读了你提供的链接,但不知道如何实现它,如果你能给一个例子,我可能会更好地理解它。 - basickarl
3个回答

1

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

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

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

0

您可以使用批量操作,特别是 Bulk.find 和 update。至于添加唯一值,您可以使用 $addToSet

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

你好,我尝试实现了你的答案类型,但仍然无法正常工作。我已经更新了问题并附上了代码。 - basickarl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接