繁体   English   中英

使用 mongoose (MongoDB) 编辑数组中的多个对象

[英]Edit multiple objects in array using mongoose (MongoDB)

所以我尝试了几种方法,但我不能,我可以用相同的键修改几个对象,但我不能用不同的键修改任何对象,如果有人能帮助我,这是一个非常复杂的问题

{ 
  id: 123, 
  "infos": [ 
    { name: 'Joe', value: 'Disabled', id: 0 }, 
    { name: 'Adam', value: 'Enabled', id: 0 }
  ]
};

在我的数据库中,我有一个集合,其中包含一个数组和几个对象,其中给出了这个。

我想修改这些对象,按名称过滤并修改值。

给你一个更好的例子,我的网站返回给我一个 object 的新数据,我想用新的 object 修改数据库 object,而不清除数组,名称键永远不会改变。

const object = [
  { name: 'Joe', value: 'Hey', id: 1 }, 
  { name: 'Adam', value: 'None', id: 1 }
];

for(const obj in object) {
  Schema.findOneAndUpdate({ id: 123 }, {
    $set: {
      [`infos.${obj}.value`]: "Test"
    }
  })
}

此代码有效但未优化,它发出多个请求,我想在一个请求中完成所有操作,而且它不更新 ID,仅更新值。

如果有人能帮助我,那就太好了,我到处都找遍了,找不到任何东西

我的模式结构

new Schema({
  id: { "type": String, "required": true, "unique": true }, 
  infos: []
})

我使用$addToSet方法将对象插入到infos数组中

尝试这个:

db.collection.update({
  id: 123,
  
},
{
  $set: {
    "infos.$[x].value": "Value",
    "infos.$[x].name": "User"
  }
},
{
  arrayFilters: [
    {
      "x.id": {
        $in: [ 
          1 
        ]
      }
    },
    
  ],
  multi: true
})
  1. 全位置$[]运算符充当数组字段中所有元素的占位符。

  2. $in你可以使用 id 的动态array 前任:

    const ids = [1,2,..n]

    db.collection.update( //Same code as it is... { arrayFilters: [ { "x.id": { $in: ids } }, ], multi: true })

MongoPlayGround 链接: https://mongoplayground.net/p/Tuz831lkPqk

也许您正在寻找这样的东西:

db.collection.update({},
{
  $set: {
   "infos.$[x].value": "test1",
   "infos.$[x].id": 10,
   "infos.$[y].value": "test2",
   "infos.$[y].id": 20
   }
 },
{
 arrayFilters: [
{
  "x.name": "Adam"
},
{
  "y.name": "Joe"
}
],
  multi: true
})

解释:

您为您拥有的对象中的所有名称定义 arrayFilters 并更新所有文档中的值和 id ...

操场

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM