目前,我使用save添加了一个文档.假设我有一个文档数组,希望将其存储为单个对象.有没有一种方法可以通过一个函数调用将它们全部添加到一起,然后在完成后得到一个回调?我可以单独添加所有文档,但管理回调以确定何时完成所有操作会有问题.

推荐答案

Mongoose尚未实现批量插入(参见issue #723).

既然你知道要保存的文档数量,你可以这样写:

var total = docArray.length
  , result = []
;

function saveAll(){
  var doc = docArray.pop();

  doc.save(function(err, saved){
    if (err) throw err;//handle error

    result.push(saved[0]);

    if (--total) saveAll();
    else // all saved here
  })
}

saveAll();

当然,这是一个权宜之计,我建议使用某种流量控制库(我使用q个,非常棒).

Node.js相关问答推荐

postgresql层与应用层的序列化

在导入时未找到Pupeteer-PAGE-Proxy包

如何使用聚合管道交换键值对

try 使用Express和连接池将数据插入MySQL数据库时出现拒绝访问错误

如何在Mongoose for MongoDB中编写此查询

当变量在另一个文件中初始化时,在初始化错误之前无法访问变量

构建期间 Docker 容器中的 npm 安装失败

我如何在nodejs中的路由之间交换令牌

合并Shift对象数组以创建最终的排班表

如何在mongodb中获取对象数组内部的数据

等待不在 Express.js 中处理 res.app.render

NodeJS 中的流 API 数据如何流动?

为什么我的 npm 脚本中的 glob 不起作用?

NPM 错误:修复upstream 依赖冲突安装 NPM 包(云功能)

用户与mongoose 的完美搭配

我们如何或可以通过 npm 和 Meteor 使用 node 模块?

在 Node.js 中的两个不同进程之间进行通信

npm publish 导致'错误:EPERM:不允许操作,取消链接...',errno -4048

为什么我们要为 Angular 2.0 安装 Node.js?

Passport 的 req.isAuthenticated 总是返回 false,即使我硬编码 done(null, true)