如何查找和更新猫鼬模型?

How to find and update a mongoose model?

我有一个模型 userDatas,它包含一个用户数据列表。

[{
    "_id" : ObjectId("5bb6730721f28a295436b36f"),
    "userId" : "5bb6730721f28a295436b36e",
    "reputationNumber" : 0,
    "questions" : [],
    "answers" : []
},
{
    "_id" : ObjectId("5bb6738c21f28a295436b371"),
    "userId" : "5bb6738c21f28a295436b370",
    "reputationNumber" : 0,
    "questions" : [],
    "answers" : []
}]

我想按 userId 过滤并将“5bb7d72af050ca0910282ff4”字符串添加到问题数组。如何实现?

//Userdatas.find

查询看起来像

Userdatas.findOne({where: {userId: "5bb7d72af050ca0910282ff4"}}, function (err, data) {
        if (!err && data) {
            var questionsArr = [];
            if (data.questions) {
                questionsArr = data.questions;
            }
            questionsArr.push('5bb7d72af050ca0910282ff4');
            data.updateAttributes({questions: questionsArr}, function(err, updateData) {
                cb (err, updateData);
            });
        } else {
            cb (err, {});
        }
    });

不幸的是,您需要 2 个查询才能执行此操作。首先,获取 userId 与所需 userId 匹配的文档,并将字符串推送到问题数组并更新文档。

编辑: 第一个 findOne 查询获取 userId 与我们的用户匹配的文档。 updateAttributes 查询在获取的文档上执行,因此它会更新正确的文档。

由于您使用的是猫鼬,因此您可以使用 findOneAndUpdate and addToSet 来实现此目的:

Userdatas.findOneAndUpdate(
   {userId: "5bb7d72af050ca0910282ff4"}, 
   {$addToSet: {questions: '5bb7d72af050ca0910282ff4'}}, 
   function (err, result) {
     ...
   }
)