java - MongoTemplate 拉取查询
问题描述
我正在尝试从 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 }
)
现在我需要在春天使用 mongoTemplate 执行此操作,我尝试使用以下答案,但它不会删除元素 MongoTemplate pull subdocument。谁能建议我如何在春季项目中使用 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 repo:https ://github.com/krishnaitd/learningJava/blob/master/spring-boot-sample-data-mongodb/src/main/java/sample/data/mongo/main/应用程序.java#L126
推荐阅读
- sql-server - 从 VM 将数据库 .bak 文件还原到 Azure 弹性池数据库
- arrays - json响应与laravel中给出的sample参数不一样
- performance-testing - In K6 - 如何在单个脚本中打破单个事务的 TPS
- python-3.x - 在 if 条件下将 '==' 替换为 'in' 运算符
- c# - 将程序集加载到新的 AssemblyLoadContext 时方法没有实现
- javascript - 将 PostgreSQL 连接从 index.js 重构为控制器:如何将 PgClient 传递给控制器?
- r - 将字符串列表转换为向量类型
- actions-on-google - Dialogflow 转换:body.session 与 request.conversation.conversationId?
- shell - 将空格参数传递给脚本(嵌入 2 个字符串)
- r - 长度为 0 的参数错误