如何使用带有 Mongoose 的 addToSet 添加多个 ObjectId?

Posted

技术标签:

【中文标题】如何使用带有 Mongoose 的 addToSet 添加多个 ObjectId?【英文标题】:How to add multiple ObjectIds using addToSet with Mongoose? 【发布时间】:2016-11-04 08:56:33 【问题描述】:

我正在尝试使用 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);

控制器

    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】:

你很亲密!当您传递添加的变量时,您不会发送值列表。你基本上是在发送一个数组对象。

如果您想执行 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? 有一个惊人而全面的选项列表供您使用。

【讨论】:

以上是关于如何使用带有 Mongoose 的 addToSet 添加多个 ObjectId?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 React 前端从 Mongoose 显示带有 <img> 的图像

如何在带有 SSL 的 Mongoose 嵌入式 Web 服务器上使用 http websocket?

我们如何使用带有 expressjs-nodejs 的 mongoose 对 mongodb 中的 ObjectId 列执行排序?

mongoose - 如何使用带有请求参数数组的 $in 进行 .find()现在它只返回空数组

如何使用带有 Mongoose 和 ES6 承诺的 Graphql 中的 find 来解析多条记录

如何创建 Mongoose Schema 并将默认设置为带有 typescript 的数组?