javascript - 如何使用 Mongoose 的 addToSet 添加多个 ObjectId?

标签 javascript arrays mongodb mongoose subdocument

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

项目模型

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);

Controller

    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()

最佳答案

你们很接近!当您传递添加的变量时,您并没有发送值列表。您基本上是在发送单个数组对象。

如果您想执行 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?这里有一个令人惊奇且全面的选项列表供您选择。

关于javascript - 如何使用 Mongoose 的 addToSet 添加多个 ObjectId?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38153997/

相关文章:

c - 字符指针预增

mongodb - 使用 mgo 查询子元素 mongodb 时不支持的投影选项

javascript - 如何使用表行 onclick 在谷歌地图(网络)上绘制信息窗口

javascript - 一个人如何通过 react 进行双向数据绑定(bind),当输入值 A 在 B 更新时更新,反之亦然?

Python:沿特定维度查找大于阈值的最大数组索引

python - 在 Python 中修改 Numpy 数组(元组定义)部分的更快/更好的方法?

node.js - 将对象放置到 mongoDb 中的根级别

mongodb - MongoDB 的估计计数查询有多准确?

javascript - 我想验证用户只能在 ListView 的每一行中选择一个复选框

javascript - 将所有 vue 组件添加到 window 数组