gpt4 book ai didi

java - MongoTemplate 拉取查询

转载 作者:行者123 更新时间:2023-12-02 09:15:23 31 4
gpt4 key购买 nike

我正在尝试从 mongoDb 中的嵌入字段数组中删除一个项目。数组是一种字符串类型,如下所示。

{
_id: 1,
fruits: [ "apples", "pears", "oranges", "grapes", "bananas" ],
vegetables: [ "carrots", "celery", "squash", "carrots" ]
}
{
_id: 2,
fruits: [ "plums", "kiwis", "oranges", "bananas", "apples" ],
vegetables: [ "broccoli", "zucchini", "carrots", "onions" ]
}

我只是想从嵌入的阵列蔬菜中取出胡萝卜。使用 mongo shell,以下查询有效

db.stores.update(
{ },
{ $pull: { vegetables: "carrots" },
{ multi: true }
)

现在我需要在 Spring 使用 mongoTemplate 来执行此操作,我尝试了下面的答案,但它不会删除该元素 MongoTemplate pull subdocument 。任何人都可以建议我如何在 spring 项目中使用 mongoTemplate 来实现这一目标

最佳答案

您可以简单地使用以下查询来提取 vegetables 对象数组中的任何字符串:

mongoTemplate.updateMulti(new Query(), new Update().pull("vegetables", "squash"), "stores");

在上面的查询中,squash将在执行后被拉出。有关详细信息,我还在上述查询之后和之前添加了对 stores 集合的查找查询,如下所示:

    List<Stores> storesList = mongoTemplate.find(new Query(), Stores.class);
for(Stores stores : storesList) {
System.out.println(stores.toString());
}
mongoTemplate.updateMulti(new Query(), new Update().pull("vegetables", "squash"), "stores");
List<Stores> afterModificationStoresList = mongoTemplate.find(new Query(), Stores.class);
for(Stores stores : afterModificationStoresList) {
System.out.println(stores.toString());
}

输出如下:

2019-11-26 10:19:57.947 DEBUG 7321 --- [           main] o.s.data.mongodb.core.MongoTemplate      : find using query: { } fields: Document{{}} for class: class sample.data.mongo.models.Stores in collection: stores
Stores{id='1.0', fruits=[apples, pears, oranges, grapes, bananas], vegetables=[celery, squash]}
Stores{id='2.0', fruits=[plums, kiwis, oranges, bananas, apples], vegetables=[broccoli, zucchini, onions]}

2019-11-26 10:19:57.975 DEBUG 7321 --- [ main] o.s.data.mongodb.core.MongoTemplate : Calling update using query: { } and update: { "$pull" : { "vegetables" : "squash" } } in collection: stores

2019-11-26 10:19:57.985 DEBUG 7321 --- [ main] o.s.data.mongodb.core.MongoTemplate : find using query: { } fields: Document{{}} for class: class sample.data.mongo.models.Stores in collection: stores
Stores{id='1.0', fruits=[apples, pears, oranges, grapes, bananas], vegetables=[celery]}
Stores{id='2.0', fruits=[plums, kiwis, oranges, bananas, apples], vegetables=[broccoli, zucchini, onions]}

有关代码详细信息,请访问 Github 存储库:https://github.com/krishnaiitd/learningJava/blob/master/spring-boot-sample-data-mongodb/src/main/java/sample/data/mongo/main/Application.java#L126

关于java - MongoTemplate 拉取查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59034265/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com