如果不存在,Mongoose 将多个对象添加到数组

Posted

技术标签:

【中文标题】如果不存在,Mongoose 将多个对象添加到数组【英文标题】:Mongoose add multiple object to array if not exist based 【发布时间】:2019-01-18 22:14:36 【问题描述】:

如何根据键将多个对象添加到数组中?

我需要在 one 查询中添加多个对象,检查每个 object key 是否不存在或重复,否则添加对象。 (label可以重复)

架构

new Schema(
      additional: [
        
          key:  type: String, required: true, unique: true ,
          label:  type: String, required: true 
        
      ]
)

请求负载:

[ key: "city", label: "CITY", key: "gender", label: "GENDER"
, key: "city" ,label: "CITY1, key: "city2", label: "CITY"]

预期结果:

[
 key: "city", label: "CITY",
 key: "gender", label: "GENDER",
 key: "city2", label: "CITY"
]

我试图找到解决方案,但找不到任何解决方案。

【问题讨论】:

【参考方案1】:

你可以尝试在mongodb中使用bulkWrite操作

假设您有以下有效负载要更新

const payload = [
   key: "city", label: "CITY" ,  key: "gender", label: "GENDER" ,
   key: "city", label: "CITY1" ,  key: "city2", label: "CITY" 
]

查询批量更新文档

Model.bulkWrite(
  payload.map((data) => 
    (
      updateOne: 
        filter:  '_id': 'xxxx', 'additional.key' :  $ne: data.key  ,
        update:  $push:  additional: data  
      
    )
  )
)

它将像这样批量发送更新请求

bulkWrite([
   updateOne:  filter:  '_id': 'xxxx', 'additional.key' :  $ne: data.key  , update:  $push:  additional: data    ,
   updateOne:  filter:  '_id': 'xxxx', 'additional.key' :  $ne: data.key  , update:  $push:  additional: data    
])

【讨论】:

对我不起作用。它是添加空文档。你测试了吗? ***.com/questions/51549326/… 它工作正常,只需要添加 _id: 'xxxxx' of specific doc

以上是关于如果不存在,Mongoose 将多个对象添加到数组的主要内容,如果未能解决你的问题,请参考以下文章

如果未找到值,则使用 mongoose 将对象添加到数组中,否则更新字段

使用 mongoose 将多个不存在的文档插入 MongoDB

使用 mongoose 将多个不存在的文档插入 MongoDB

Mongoose Schema中Array内的重复值

将项目添加到 Mongoose 中的多维对象数组

将项目添加到 Mongoose 中的多维对象数组