mongodb ArrayFilter mongo DB

dsekswqp  于 2023-06-29  发布在  Go
关注(0)|答案(2)|浏览(144)

我正在处理一个mongo数据库,我的表看起来像这样。目前,为了更新所有内容,我使用保存方法传递一个bean,但如果我只需要更新数组中的一个元素,它就不会工作,因为它会覆盖整个记录。

{
"_id" : "21",
"idVlt" : "187",
"giochi" : [
    {
        "_id" : "22",
        "installed" : "true",
        "enable" : "true",
        "urlimg" : "placeholder.png",
        "categories" : [

        ],
        "tags" : [

        ]
    },
    {
        "_id" : "151",
        "installed" : "true",
        "enable" : "false",
        "urlimg" : "placeholder.png",
        "categories" : [

        ],
        "tags" : [

        ]
    },
    {
        "_id" : "197",
        "installed" : "true",
        "enable" : "false",
        "urlimg" : "placeholder.png",
        "categories" : [

        ],
        "tags" : [

        ]
    }
],

}
我想知道如何用_id:22更新数组的元素:“installed”:“true”--> false
并且能够向数组中插入新元素:

{
    "_id" : "222",
    "installed" : "true",
    "enable" : "true",
    "urlimg" : "placeholder.png",
    "categories" : [

    ],
    "tags" : [

    ]
}

使用db.AssociazioneGameVlt.find({ $and:[ {“giochi._id”:“77”}] })我已经x1c 0d1x

pgky5nke

pgky5nke1#

要使用_id更新giochi数组中的元素,请执行以下操作:“22”可以使用以下更新查询:

db.collection.update({
  "_id": "21",
  "giochi._id": "22"
},
{
  $set: {
    "giochi.$.installed": "false"
  }
})

并添加一个新元素,您可以使用下面的

db.collection.update(
   { "_id": "21" },
      { $push: { "giochi": {
          "_id" : "222",
          "installed" : "true",
          "enable" : "true",
          "urlimg" : "placeholder.png",
          "categories": [],
          "tags": []
        } }
      }
    )
kninwzqo

kninwzqo2#

谢谢,我在我的mongodb上试过了,还可以。。现在我把它翻译成这样的java代码

Query query = new Query(Criteria.where("idVlt").is("148"));
      query.addCriteria(Criteria.where("giochi._id").is("197"));
      System.out.println("query : "+query);
      var update = Update.update("giochi.$.installed", "148_197");
      System.out.println("update : "+update);
      mongoTemplate.findAndModify(query, update,AssociazioneGameVlt.class );

但我有这个错误:org.springframework.data.mongodb.UncategorizedMongoDbException:命令失败,错误为% 2(BadValue):'位置运算符未从查询中找到所需的匹配项。'在服务器上...
但是,如果我输入'0'而不是'$',它会修改数组的第一个元素,而不是得到正确的元素

相关问题