gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 10:03:02 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com