我有一个Mongo集合,我试图插入多个文档,如下所示:
db.collection('properties').insertMany(docs)
.catch(err => console.log(err))
.then((err, result) => {
console.log(err);
console.log(docs);
console.log(result);
//if (err) console.log(err);
//else if (callback) callback();
});
这总是会返回以下错误:
{ [MongoError: insertDocument :: caused by :: 11000
E11000 duplicate key error index: properties.properties.$_id_
dup key: { : ObjectId('591bbecdf9d86c59eea1047c') }]
数组中的所有对象最初都没有_id
属性。但是,console.log(docs)
之后会显示:
{ url: '/property/z37717098',
thumbnailUrl: 'https://li...2e175fca56f08ceb6ffab5_354_255.jpg',
lat: '50.81647',
lng: '-1.085111',
dateAdded: '30/07/2015',
images:
[ 'https://li.zoocdn...b2e175fca56f08ceb6ffab5_645_430.jpg',
'https://li.zoocdn...c2e77d50e653300e5d21358d4f9825_645_430.jpg',
'https://li.zoocdn...523163e4684226420bb4c167d90666_645_430.jpg',
'https://li.zoocdn...e008165a61d9154a7a59c881_645_430.jpg',
'https://li.zoocd...218736df8f964745602744f7c_645_430.jpg',
'https://li.zoo...ad5a98ed2ffe78322c2_645_430.jpg',
'https://li.zooc...efe4a54042ff76690_645_430.jpg',
'https://li.zoocd...6813d439a1740f42e_645_430.jpg',
'https://li.zooc...c2b38417154aeba6c28cbd_645_430.jpg' ],
_id: 591bbecdf9d86c59eea1047c },
果然,数组中的所有对象现在都有_id
属性,每个对象都有一个重复值。
编辑:我还应该提到数组中的第一个对象是插入到集合中,并且其_id
属性具有相同的值重复的错误消息显示为冲突。这意味着对我来说insertMany
函数赋予对象相同的ObjectId
。
发生了什么?为什么insertMany
会产生一大堆重复的ObjectId
,这显然会导致插入失败?
答案 0 :(得分:0)
我在insertMany()
上遇到了同样的问题。我无法确定根本原因。以我为例,我遍历带有对象(文档)的数组,然后将它们批量插入。一次可以记录数百到数千条记录。
在我的阅读中,我猜测它与驱动程序有关,因为最终是在插入之前为您添加_id
字段的原因。不过,我并没有花太多时间来研究这个问题。
再次,根据我的经验,我总是遇到E11000 duplicate key
错误。因此,作为一种解决方法,我最终以编程方式创建了自己的_id
字段。如何实现它完全取决于您。
就我而言,我只是导入了uuid库:
npm install uuid
然后我遍历所有文档,并附加了uuid。
documents.forEach(doc => doc._id = uuidv1())
希望有帮助!