如何在nodejs中使用mongoose在mongodb中一次创建多个文档,即使有些失败,也应该插入rest并输出摘要

w1jd8yoj  于 2023-11-17  发布在  Go
关注(0)|答案(2)|浏览(156)

我想在nodejs中使用mongoose在mongodb中插入/创建多个文档。现在,即使一些插入失败可能是由于重复的键,其他的应该被插入,最后我应该有一个输出,显示插入和未插入的数据数组。

example input document:[
{_id: 11, name:'abc'},
{_id: 22, name:'abc'},
{_id: 11, name:'qwe'},
{_id: 33, name:'xyz'}
]

字符串
在此第三个数据具有重复的_id,因此将是一个错误[id dup key:{ _id:“11”}],操作将停止错误。但我希望它不应该停止,而是插入其他正确的数据

expected output is insert: [
    {_id: 11, name:'abc'},
    {_id: 22, name:'abc'},
    {_id_ dup key: { _id: "11" }},
    {_id: 33, name:'xyz'}
    ]

I have tried both
mongoose.model(student).create(_req.body)
mongoose.model(student).insertMany(_req.body)

**但这两种方式都失败了,并抛出错误。如果所有要创建的传递数据都正确,则工作正常。**是否需要传递任何额外的属性来实现相同的目标,因为在mongoose的官方文档中,它说它可以据我所知。还尝试传递一些选项,但失败了。https://mongoosejs.com/docs/api/model.html#Model.create()https://mongoosejs.com/docs/api/model.html#Model.insertMany()

x1c 0d1x的数据


kse8i1jr

kse8i1jr1#

我希望这篇文章能对你有所帮助

const documentsToInsert = [
  {_id: 11, name:'abc'},
  {_id: 22, name:'abc'},
  {_id: 11, name:'qwe'},
  {_id: 33, name:'xyz'}
];

YourModel.insertMany(documentsToInsert, (error, insertedDocuments) => {
  if (error) {
    console.error('Error:', error);
  } else {
    console.log('Successfully inserted documents:', insertedDocuments);

    const successfulInserts = insertedDocuments.filter(doc => doc instanceof YourModel);
    const failedInserts = insertedDocuments.filter(doc => !(doc instanceof YourModel));

    console.log('Successfully inserted count:', successfulInserts.length);
    console.log('Failed insert count:', failedInserts.length);
  }

字符串

rsaldnfx

rsaldnfx2#


的数据
使用方式:

insertMany(_req.body, { ordered: false, writeConcern: {} })

字符串
使用此选项可以完成工作,但会抛出错误,然后在错误中我们可以获得输出摘要。
虽然这符合我的目的,但如果有人知道任何更好的方法,肯定可以张贴你的答案。

相关问题