当前位置: 首页 > 知识库问答 >
问题:

使用spring boot更新mongodb中的嵌套数组对象字段

益清野
2023-03-14

mongodb新手,尝试更新文档的多个数组对象字段。没有得到预期的结果

文档结构:

{
    "_id" : ObjectId("4faaba123412d654fe83hg876"),
    "user_id" : 123456,
 
    "items" : [{
            Name:{
                    "id":1,
                    "item_name" : "my_item_one",
                    "price" : 20
            },
            Details:{
                    "Date" : "10/02/2022",
                    "Address":"test"
            }}],
            [{
            Name:{
                    "id":2,
                    "item_name" : "my_item_two",
                    "price" : 20
            },
            Details:{
                    "Date" : "10/02/2022",
                    "Address":"test"
            }}]
}

基于id需要更新日期

Spring启动代码

Query query = new Query(Criteria.where("user_id").is("123456").and("items")
.eleMatch(Criteria.where("items.Name.id").is(1)));
Update update = new Update().set("items.0.Details.Date", "29/01/2022");
mongoOperation.findAndModify(query, update, Items.class);

但是当我运行这个查询时,它返回null。有人能帮我吗?谢谢,我也试过了

Query query = new Query(Criteria.where("user_id").is("123456").and("items")
.eleMatch(Criteria.where("items.Name.id").is(1)));
Update update = new Update().set("items.Details.Date", "29/01/2022");
mongoOperation.findAndModify(query, update, Items.class);

共有1个答案

朱高丽
2023-03-14

我想你的查询没有发现任何需要更新的内容。尝试在java中以“find”的形式运行查询,然后查看返回的是哪个文档。我的直觉是“和eleMatch”部分是错误的。只需按用户id查询整个文档,并在特定字段上执行更新。此外,您描述的更新语法将更新所有项,您需要在数组中指定索引。也许用java手动更新会更容易。

 类似资料:
  • 我需要更新嵌套在我的用户文档中的一个字段,该字段包含一个part对象数组,以添加新的part。一个part对象如下所示: 所以这意味着$addToset对我的情况没有好处...现在我不知道该怎么办。

  • 问题内容: 我正在尝试更新嵌套数组中的值,但无法使其正常工作。 我的对象是这样的 我需要将值推送到“ answeredBy”数组。 在下面的示例中,我尝试将“成功”字符串推到“ 123 _id”对象的“ answeredBy”数组中,但是它不起作用。 我找到了此链接,但其答案仅表示我应该使用类似结构的对象而不是数组。这不适用于我的情况。我真的需要将我的对象嵌套在数组中 如果您能在这里帮助我,那就太

  • 我正在尝试更新嵌套数组中的值,但无法使其工作。 我的对象是这样的 提前谢谢!

  • 问题内容: 我正在尝试更新嵌套数组中的值,但无法使其正常工作。 我的对象是这样的 我需要将值推送到“ answeredBy”数组。 在下面的示例中,我尝试将“成功”字符串推到“ 123 _id”对象的“ answeredBy”数组中,但是它不起作用。 我找到了此链接,但其答案仅表明我应该使用像结构这样的对象而不是数组。这不适用于我的情况。我真的需要将我的对象嵌套在数组中 如果您能在这里帮助我,那就

  • 问题内容: 我有以下mongodb文件结构: 我已经能够使用$ elemMatch来更新操作中的字段,但是当我尝试对参数执行相同的操作(修改)时,它似乎不起作用。我想知道我应该尝试哪种其他方法,以便能够成功更新特定参数中的字段(通过其pid查找)。 我当前拥有但不起作用的更新代码如下所示: 问题答案: MongoDB 3.6及更高版本 MongoDB3.6及更高版本提供了一项新功能,该功能允许您使

  • 我正在尝试更新MongoDB中嵌套对象中的一个键值。目前,我的做法是覆盖整个嵌套对象,我如何改变一个键-值对?