Добавить объект в массив с помощью mongoose - PullRequest
0 голосов
/ 09 сентября 2018

У меня есть веб-сервер nodejs, который позволяет загружать файлы, и я хотел бы добавить файлы, загруженные пользователям, но каждый раз, когда я пытаюсь добавить в массив db пользователей, он говорит, что добавляет его, но когда я читаю файлы пользователей , он возвращает пустой массив. Я использовал следующий код, чтобы попытаться добавить в массив:

for (var x in files){
 User.findByIdAndUpdate(req.user._id,
  {$push: {"files":{name:files[x].filename}}},
  function (err, doc) {
   if (err) throw err;
   console.log(doc);
 });
}

Используемая схема:

var schema = new mongoose.Schema({
 name: {type:String, required: true, trim: true, lowercase:true, unique: true},
 hash: {type:String, required: true },
 files: [],
 premium: {type:Boolean, default: false}
});

1 Ответ

0 голосов
/ 09 сентября 2018

Удалите цикл for и используйте $each с оператором $push, чтобы добавить несколько значений в массив следующим образом:

User.findByIdAndUpdate(req.user._id,
    { '$push': {
        'files': {
            '$each': files.map(f => ({ name: f.filename }))
        }
    } },
    (err, doc) => {
        if (err) throw err;
        console.log(doc);
    }
);

Возможно, вы захотите обновить свою схему, чтобы явно определить поле массива файлов:

var schema = new mongoose.Schema({
   name: {type: String, required: true, trim: true, lowercase:true, unique: true},
   hash: {type: String, required: true },
   files: [{ name: String }],
   premium: {type: Boolean, default: false}
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...