【发布时间】:2020-04-21 18:19:20
【问题描述】:
我试图将数组中的多个项目放入一个对象中,但结果只是该数组中的一个项目。我想要的是从这个数组中带几个项目。
我有:
{
"title": "market",
"products": [
{"name": "pepperoni pizza"},
{"name": "mozzarella pizza"},
{"name": "yogurt"},
{"name": "soda"},
]
}
还有:
Query query = new Query();
query.fields().elemMatch("products", Criteria.where("name").regex("pizza", "i"))
.include("products")
.include("title");
mongoTemplate.find(query, Business.class);
结果:
{
"title": "market",
"products": [
{"name": "pepperoni pizza"}
]
}
但我想要:
{
"title": "market",
"products": [
{"name": "pepperoni pizza"},
{"name": "mozzarella pizza"}
]
}
【问题讨论】:
-
查询的行为符合预期。这是因为您使用的是 $elemMatch 投影运算符。根据定义,它将查询结果中的数组字段的内容限制为仅包含匹配
$elemMatch条件的第一个元素。要过滤您期望的方式,您必须使用带有$filter的聚合查询。
标签: java mongodb spring-boot spring-data