arrays - 如何使用 Node.js 驱动程序在 mongoDB 中多次插入数组?

标签 arrays node.js mongodb

我正在尝试使用mongodb-node.js插入任何给定数组中包含的多个对象。司机。我的目的是修改每个对象的内容并立即将这些对象保存在数据库中。下面的代码说明了我想要做的事情。

var MongoClient = require("mongodb").MongoClient;
var URL = "mongodb://localhost:27017/database";

MongoClient.connect(URL, function(err,db) {
  if(err) console.log(err);

  var array = []; // an array that serves as a data source

  for(var i=0; i<10; i++) {
    array.push({ key: i });
  };

  db.collection("collection_name", function(err,col) {
    if(err) console.log(err);

    // --- "document insertion" --- //
    array.forEach(function(doc) {
      col.insert(doc);
    });
    // --- "document insertion" --- //

  });
});

这工作得很好,因为数组中的每个对象都被插入到数据库中。但是,我想多次执行此操作;换句话说,我试图在 for 循环或 while 循环中运行“文档插入”代码,其中数据在每次迭代中由某个函数修改,然后保存在 mongoDB 中,但这根本行不通。

我尝试了以下方法,但没有成功,因为好像 for 循环和 while 循环只执行了一次。

// --- "document insertion" --- //
for(var j=0; j<n; j++) { /* where n > 1 */
  /* someFunction() might be executed to alter the content of the objects */
  array.forEach(function(doc) {
    col.insert(doc);
  });
};
// --- "document insertion" --- //

这也不起作用。

// --- "document insertion" --- //
while(--n) { /* where n > 1 */
  /* someFunction() */
  array.forEach(function(doc) {
    col.insert(doc);
  });
};
// --- "document insertion" --- //

我想对包含更复杂模式设计的大型数组(大于 10k 文档)多次执行此操作。 for 或 while 循环试图模拟时间的节奏,数组中的每个对象都应该随着时间的流逝而变化。我的目标是保存数组中所有对象的每个时间步长。鉴于“文档插入”代码似乎只执行一次,我怎样才能实现这一点?我希望我已经清楚地表达了自己的意思。

任何评论都会受到热烈欢迎和赞赏。感谢您的帮助。

最佳答案

问题在于 mongoDB Node.js 驱动程序将添加 _id插入文档之前的属性(如简要提到的 here ),即您的数组元素将有一个 _id第一个循环之后的属性。在循环的第二次运行中,这将导致重复的键异常,因此文档仅插入一次。 您可以在向insert添加回调时自己看到问题。并写出如下错误:

...
col.insert(doc, function(err) {
    if (err) {
        console.log(ErrorEvent);
    }
});
...

errmsg: 'E11000 duplicate key error collection: ...

对此的快速修复可能如下所示:

...
array.forEach(function (doc) {
    col.insert(doc);
    delete doc._id;
});
...

关于arrays - 如何使用 Node.js 驱动程序在 mongoDB 中多次插入数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38492714/

相关文章:

c++ - 函数返回数组 C++

node.js - 使用 Google Vision Api 在 Azure 中托管的机器人 - gRPC 问题

linux - 如果删除 mongodb 数据库文件会怎样?

javascript - mongoimport错误,失败:无效的JSON输入

javascript - 查找 JavaScript 数组中缺失的数字

java - 简化和压缩数组上的多个编辑操作。 java

html - Nodejs 和 heroku - Heroku 找不到我的 css 文件和我的图像文件,但在本地主机端口 : 3000 上工作正常

node.js - 为 Amazon ApiGateway 中的 URI 指定的 HTTP 端点无效

javascript - mongodb查询: getting N results with a filter on a field

php - 搜索具有开始和结束持续时间(以秒为单位)的数组(视频)以查找完整长度的视频