NodeJS Client

时间:2018-06-15 09:06:59

标签: javascript database mongodb error-handling

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

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

1 个答案:

答案 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的文档,则它将更新该文档。