我试图在mongo数据库中每两秒插入一次文档。插入第一个文档后,客户端会抛出 BulkWriteError
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbObject = db.db(DBName);
var insertJSONType = {latitude: getRandomArbitrary(30,50), longitude: getRandomArbitrary(30,50)}
for (var i=0; i<10; i++) {
dbObject.collection(collectionName).insert(insertJSONType, (err, res) => {
if (err) throw err;
console.log("Document inserted successfully {nInserted: 1}")
db.close()
})
sleep.sleep(2)
}
抛出的错误就是这个。
node mongo.js
Document inserted successfully {nInserted: 1}
/home/user/random/node_modules/mongodb/lib/utils.js:132
throw err;
^
BulkWriteError: E11000 duplicate key error collection: latlong.data index: _id_ dup key: { : ObjectId('5b237dcc4353c06c04a4cf38') }
at resultHandler (/home/gowtham/random/node_modules/mongodb/lib/bulk/ordered.js:459:11)
at /home/gowtham/random/node_modules/mongodb-core/lib/connection/pool.js:544:18
at process._tickCallback (internal/process/next_tick.js:61:11)
我应该在这里失踪什么?我在互联网上做了一些搜索,但似乎没有任何好处。感谢。
答案 0 :(得分:0)
dbObject.collection(collectionName).insert
在这一行中,您正在使用insert
方法,该方法会在MongoDB中插入具有唯一ID的每个文档。同时,如果找到重复的ID,则会出错(如您的错误所示)。
好像您正在尝试多次插入同一Object。尝试使用
myCollection.bulkWrite(records, { ordered: false });
其中records
可以
records.push(
{
updateOne: {
filter: { _id: _id},
update: { $set: { insertJSONType } },
upsert: true
}
}
);
如果已经存在带有_id
的文档,这将尝试过滤。否则,upsert: true
将添加一个新文档。如果已经存在带有_id
的文档,则它将更新该文档。