Как найти и обновить модель мангуста? - PullRequest
0 голосов
/ 06 октября 2018

У меня есть модель 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 голосов
/ 06 октября 2018

Поскольку вы используете mongoose, вы можете использовать findOneAndUpdate и addToSet для достижения этого:

Userdatas.findOneAndUpdate(
   {userId: "5bb7d72af050ca0910282ff4"}, 
   {$addToSet: {questions: '5bb7d72af050ca0910282ff4'}}, 
   function (err, result) {
     ...
   }
)
0 голосов
/ 06 октября 2018

Запрос будет выглядеть примерно так:

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, и вставить строку в массив вопросов и обновить документ.

EDIT: первый запрос findOne извлекает документ, в котором userId соответствует нашему пользователю.Запрос updateAttributes выполняется для документа, который был выбран, поэтому он обновляет правильный документ.

...