gpt4 book ai didi

javascript - insertMany 总是返回重复的 _id 错误

转载 作者:可可西里 更新时间:2023-11-01 09:48:25 25 4
gpt4 key购买 nike

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

最佳答案

我在使用 insertMany() 时遇到了同样的问题。我无法确定根本原因。在我的例子中,我循环遍历带有对象(文档)的数组,然后批量插入它们。一次从几百到几千条记录。

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

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

在我的例子中,我只是导入了 uuid 库:

npm install uuid

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

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

希望对您有所帮助!

关于javascript - insertMany 总是返回重复的 _id 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44014949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com