首页 > 解决方案 > NodeJS客户端中MongoDB中的BulkWriteError

问题描述

我试图在 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)

我应该在这里丢失什么?我在互联网上进行了一些搜索,但似乎没有任何好处。谢谢。

标签: javascriptdatabasemongodberror-handling

解决方案


dbObject.collection(collectionName).insert

在这一行中,您正在使用insert在 MongoDB 中插入具有唯一 ID 的每个文档的方法。同时,如果发现重复的 ID(如您的错误所示),则会出错。

看起来您正试图多次插入同一个对象。尝试使用

myCollection.bulkWrite(records, { ordered: false });

records可以在哪里

records.push(
    {
        updateOne: {
            filter: { _id: _id},
            update: { $set: { insertJSONType } },
            upsert: true
        }
    }
);

如果已经存在带有_id. 如果没有,upsert: true, 将添加一个新文档。如果一个文档_id已经存在,那么它会更新那个文档。


推荐阅读