如何使用添加到Mongoose的addToSet添加多个ObjectIds?

时间:2016-07-01 21:19:23

标签: javascript arrays mongodb mongoose subdocument

我正在尝试使用mongoose addToSet将多个ObjectId添加到子doc数组中。我已经使用类似的方法添加单个子文档,但我试图弄清楚如何添加多个子文档。

项目模型

import mongoose from 'mongoose';

var Schema = mongoose.Schema;
const ProjectSchema = new Schema({
  title: {
           type: String
  },
  files: [{
            type: Schema.ObjectId,
            ref: 'File'
  }]
});

export default mongoose.model('Project', ProjectSchema);

文件模型

import mongoose from 'mongoose';

var Schema = mongoose.Schema;
const FileSchema = new Schema({
  fileUrl: {
           type: String
  },
  date: {
          type: Date
  }

});

export default mongoose.model('File', FileSchema);

控制器

    Project.create({fileUrl: req.fileUrl}, (err, proj) => {
      if (err) {
        console.log(err);
        return res.status(400).send(err);
      } else {
        File.distinct('_id', {date: {"$lt": req.date }}).exec((err, files) => {
          if (err)
            return (err)
        var added = new File([files]) <-----THE PROBLEM
        proj.files.addToSet(added)
        proj.save() 
        return res.status(200).send('OK');
    })
  }
}); 

//通常我会做这样的事情如果我在数组中添加一个子文档: (实施例)

var foo = new File(file)
proj.files.addToSet(foo)
proj.save()

1 个答案:

答案 0 :(得分:0)

你非常接近!当您传递添加的变量时,您不会通过发送值列表。您基本上是发送一个数组对象。

如果您想执行addToSet函数,请尝试进行简单的迭代:

files.forEach(function(f) {
    var added = new File(f)
    proj.files.addToSet(added);
    proj.save(function(err, saved){
      if (err)
        throw (err)
      return;
    })
});

你可以在这里找到更多javascript迭代器的例子:For-each over an array in JavaScript?有一个惊人而全面的选项列表。