更新子文档的所有元素,其中子文档是列表的一部分

我与 MongoDB 中具有不同城市地址的营销人员有文档。


{

  "_id": "name",

  "cities": [

    {

      "id": "1234abc",

      "city_name": "London",

      "country": "England",

      "addresses": [

        {

          "Home": "Unit 14 Edgar Buildings George Street"

        },

        {

          "Office": "Studio 103 The Business Centre 61"

        }

      ]

    },

    {

      "id": "1234xyz",

      "city_name": "Paris",

      "country": "France",

      "addresses": [

        {

          "Home": "102  rue La Boétie"

        },

        {

          "Office": " IMPASSE VIVALDI VAUCE"

        }

      ]

    }

  ]

}

我的实体类是 Person、city 和 address。

如果那个人转移到另一个国家,如 Canda 并想要更新 France - Paris 子文档。


{"_id": "name",

{

      "id": "1234xyz",

      "city_name": "Toronto",

      "country": "Canada",

      "addresses": [

        {

          "Home": "Toronto City Hall 100 Queen St W"

        },

        {

          "Office": "4110 Yonge StNorth York, ON M2P 2H3"

        }

      ]

    }

}

我不知道哪个 Spring Data Mongo api 可以在这里工作。


我尝试使用以下代码,但没有任何更新。


Update changed = new Update().pull("cities", new Query(Criteria.where("_id").is(username)));

mongoTemplate.updateFirst(new Query(Criteria.where("cities._id").is(cityId)), changed, Person.class);

如果我使用Update update = new Update().set("cities",city);所有子文档,则替换为一个城市


万千封印
浏览 122回答 3
3回答

慕斯709654

拜托,你能在这里检查一次吗?Criteria.where("cities._id").is(cityId). 在这里我觉得我们必须使用"cities.id".

qq_花开花谢_0

现在我删除它并在列表中推送更新的文档,而不是更新子文档实体。它对我有用。通过执行 toHexString 访问对象 ID 之后。删除操作 update.pull("cities", Query.query(Criteria.where("id").is(id.toHexString()))); mongoOperations.upsert(查询,更新,Person.class);添加操作:update.push("cities", subdocumentEntity); mongoOperations.updateFirst(查询,更新,Person.class));

Smart猫小萌

要删除特定的城市文档:Update changed = new Update().pull("cities", new Query(Criteria.where("id").is(cityId)));mongoTemplate.updateFirst(new Query(Criteria.where("_id").is(username)), changed, Person.class);添加新城市信息:Update update = new Update().addToSet("cities",city);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java