用猫鼬将对象添加到数组

时间:2018-09-08 21:07:29

标签: arrays node.js mongodb mongoose schema

我有一个允许文件上传的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 :(得分:0)

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