javascript - 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)
我应该在这里丢失什么?我在互联网上进行了一些搜索,但似乎没有任何好处。谢谢。
解决方案
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
已经存在,那么它会更新那个文档。
推荐阅读
- html - 如何制作一个在我的背景图像上滚动的超大屏幕?
- oracle - 创建过程oracle sql developer时出现异常错误
- pygame - pygame背景图像不显示
- java - java.lang.NoClassDefFoundError:org.bouncycastle.asn1.ASN1Encodable
- mongodb - MongoDB 可以将多个字段添加到单个 $addToSet 中吗?
- ms-access - 面向 DB Layman 的亚马逊 MWS 和 Microsoft Access?
- amazon-dynamodb - 有没有办法将数字转换为 DynamoDB 在 Step Functions 中期望的字符串?
- arrays - ES6 - 遍历数组以将数据发布到 API
- json - SwiftyJSON 不适用于 WebSocket 消息
- python - 通过正则表达式 str.extract() 从数据框中的完整地址列获取邮政编码,并在 pandas 中添加为新列