insertMany始终返回重复的_id错误

时间:2017-05-17 03:19:09

标签: javascript mongodb insert

我有一个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,这显然会导致插入失败?

1 个答案:

答案 0 :(得分:0)

我在insertMany()上遇到了同样的问题。我无法确定根本原因。以我为例,我遍历带有对象(文档)的数组,然后将它们批量插入。一次可以记录数百到数千条记录。

在我的阅读中,我猜测它与驱动程序有关,因为最终是在插入之前为您添加_id字段的原因。不过,我并没有花太多时间来研究这个问题。

再次,根据我的经验,我总是遇到E11000 duplicate key错误。因此,作为一种解决方法,我最终以编程方式创建了自己的_id字段。如何实现它完全取决于您。

就我而言,我只是导入了uuid库:

npm install uuid

然后我遍历所有文档,并附加了uuid。

documents.forEach(doc => doc._id = uuidv1())

希望有帮助!