mongodb更新数组的对象数组中的值

cnh2zyt3  于 2022-12-03  发布在  Go
关注(0)|答案(1)|浏览(199)


i有一个问题,我不能自己解决。我有一个数据在mongo数据库,我想更新特定的值,我显示代码和图像,我想要的是更新特定的对象(最小属性),我怎么能更新它?

await user.findOneAndUpdate({ name: "liori", decibelHistory : {$elemMatch : {min : 10}}}, {$set : {"decibelHistory.$.min" : 1}});
{
  "_id": {
    "$oid": "638a09cf5f1e5156db8fc5f8"
  },
  "name": "liori",
  "password": "liori",
  "decibelHistory": [
    {
      "test1": [
        {
          "max": 90,
          "min": 10,
          "avg": 35
        }
      ]
    },
    {
      "test2": [
        {
          "max": 80,
          "min": 20,
          "avg": 30
        }
      ]
    }
  ],
  "timeLapse": 1200,
  "__v": 0
}
tp5buhyn

tp5buhyn1#

要更新decibelHistory数组中的特定对象,可以在findOneAndUpdate()查询中使用**$set$elemMatch**运算符。

$set运算符用于为指定字段指定新值,在本例中为decibelHistory数组的min属性。$elemMatch运算符用于匹配decibelHistory数组中要更新的特定对象。

以下是如何使用这些运算符更新min属性的示例:

await user.findOneAndUpdate(
    {
        name: "liori",
        decibelHistory: {
            $elemMatch: { min: 10 }
        }
    },
    {
        $set: { "decibelHistory.$.min": 1 }
    }
);

此查询将更新decibelHistory数组中min属性值为10的对象的min属性,并将其新值设置为1。
我希望这对你有帮助!
编辑:如果仍然无法正常工作,请检查一些潜在问题:

  • 用户变量可能没有定义,或者它可能没有引用MongoDB集合。要使用findOneAndUpdate()方法,用户必须是对MongoDB集合的引用。
  • 您使用的MongoDB版本可能不支持findOneAndUpdate()方法。此方法是在2.6版本中引入的,因此如果您使用的是较旧版本的MongoDB,则此方法将不可用。
  • $elemMatch运算符可能不受您使用的MongoDB版本的支持。此运算符是在2.4版本中引入的,因此如果您使用的是较旧版本的MongoDB,则此运算符将不可用。

相关问题