以下是我的收藏:
[
{
"_id": 1,
"favorite": {
"color": "red",
"foods": {
"fruits": "banana",
"fastfood": [
"burger",
"sandwich"
]
}
}
},
{
"_id": 2,
"favorite": {
"color": "green",
"foods": {
"noodles": "ramen",
"fastfood": [
"fries",
"burger",
"corn dog"
]
}
}
},
{
"_id": 3,
"favorite": {
"color": "red",
"foods": {
"soup": "cream soup"
}
}
}
]
我需要检查快餐项目是否相同。为了实现这一点,我已经有了 mongo shell 查询。
db.collection.find({
$expr: {
$eq: [
[
"burger",
"sandwich"
],
"$favorite.foods.fastfood"
]
}
})
但是,我需要在 mongoTemplate 中使用它,因为我正在使用 Spring Boot 应用程序。我目前还做不到。
我认为
MongoTemplate
的翻译可能是这样的,你对 mongo 说“给我 favorite.foods.fastfood
是 ["burger", "sandwich"]
的元素。
Query query = new Query(Criteria.where("favorite.foods.fastfood").is(List.of("burger", "sandwich")));
return mongoTemplate.find(query, YourDesiredDocument.class);
但是如果数组完全相同(包括元素顺序),它将返回数据。
因此,例如数组
["burger","sandwich"]
会很好地工作。["sandwich","burger"]
不会返回任何数据。
也许你不需要这个,但它可以提供帮助,你也可以尝试这个查询,其中没有检查顺序,因此将返回具有这些元素的所有数组。
使用
MongoTemplate
它可以是这样的(未测试):
Query query = new Query(new Criteria().andOperator(
Criteria.where("favorite.foods.fastfood").all("burger", "sandwich"),
Criteria.where("favorite.foods.fastfood").size(2)
));
return mongoTemplate.find(query, YourDesiredDocument.class);