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

时间:2018-10-05 21:46:51

标签: mongodb mongoose loopbackjs

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

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

我想按userId过滤,然后将“ 5bb7d72af050ca0910282ff4”字符串添加到问题数组。如何做到这一点?

//Userdatas.find

2 个答案:

答案 0 :(得分:3)

由于您使用的是猫鼬,因此可以使用findOneAndUpdateaddToSet来实现:

Database error 0x80040E14: Syntax error in FROM clause.
; The query: SELECT TOP 1 * FROM ( ALTER TABLE [Date E$] 
 ADD [Type] string NOT NULL DEFAULT "P1" ) [TableauSQL]

答案 1 :(得分:1)

查询看起来像

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个查询才能执行此操作。首先,获取用户ID与所需的用户ID匹配的文档,并将字符串推送到问题数组并更新文档。

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