【问题标题】:MongoDB - Update/Insert the Array of objectMongoDB - 更新/插入对象数组
【发布时间】:2019-07-25 21:03:31
【问题描述】:

我有一个集合,即“cmets”,其中包含两个字段。如下 -

评论 -

{ 
  _id: 'unique_string',
  dataVar: [{
    name: {
       type: string
    }, 
    value: {
       type: string
    }
  }] 
}

您可以假设收集数据如下 -

[
  _id: 'xxxxxx', 
  user: 'robin',
  dataVar:  [{
   name: 'abc', 
   value: 123
  }, {
   name: 'bcd', 
   value: 12345
  }]
]

现在的问题是 - (我在 nodeJS 应用程序中使用猫鼬) - 如何更新和插入“dataVar”中的数据? - 如果数据不可用,则应创建新文档。

案例 1。 如果用户像

这样发送帖子数据
{
_id: 'xxxxxx', 
user: 'robin',
dataVar: [{name: 'abc', value: 12345}]
} 

然后在执行查询后,上面的文档(其_id为'xxxxxx')应该如下更新-

{
    _id: 'xxxxxx', 
     user: 'robin',
    dataVar: [
        {name: 'abc', value: 12345}, 
        {name: 'bcd', value: 12345}
    ]
}

案例 2。 如果数据不存在,则应创建新文档。

【问题讨论】:

  • 用户能否发送多个值,如dataVar: [{name: 'abc', value: 12345}, {name: 'bcd', value: 333}]
  • @HardikShah 是的

标签: node.js mongodb mongoose


【解决方案1】:

要更新mongodb中的记录,可以使用like

comments.findOneAndUpdate({ _id: 'xxxxxx' }, { $push: { dataVar: {$each: [{name: 'abc', value: 123}, {name: 'def', value: 456}] } } })

如果不存在,您可以使用{upsert: true} 选项在集合中创建字段。

要更新记录,您必须在主架构中使用子架构。这样_id 字段就会在数组的每个对象中创建。因此,您可以唯一标识要在数组内更新的对象。

comments.findOneAndUpdate({ "dataVar._id": 'xxxxxx' }, { $set: { name: 'xyz', value: 789 } })

这样就可以更新数组里面的对象了。

如果您不想使用_id,您至少有一个包含唯一值的字段。这样您就可以findOneAndUpdate 数组中的特定对象。

【讨论】:

    猜你喜欢
    • 2020-04-27
    • 2021-07-21
    • 2016-08-21
    • 2018-06-06
    • 1970-01-01
    • 2012-09-10
    • 2017-12-29
    • 2023-02-16
    • 1970-01-01
    相关资源
    最近更新 更多