mongodb - 查询同类型嵌套文档的Mongo集合
问题描述
我有一个不那么独特的要求,但我只是在寻找正确的术语进行搜索,因为我只不断获得有关如何查询列表/数组字段或嵌套元素的结果。
这是我的课程(文档类型)...
public class Item {
private String identity = null;
private String name = null;
private String type = null;
private List<Item> grouping = null;
}
因此,这方面的一些实体实例type
可能会变得复杂,如下所示......
{
"identity":"ITEM-1",
"name":"Pack-1",
"type":"Bundle",
"grouping":[
{
"identity":"ITEM-2",
"name":"Book",
"type":"Atomic Unit"
},
{
"identity":"ITEM-3",
"name":"Stationary",
"type":"Bundle",
"grouping":[
{
"identity":"ITEM-4",
"name":"Pen",
"type":"Atomic Unit"
},
{
"identity":"ITEM-5",
"name":"Paper",
"type":"Atomic Unit"
},
{
"identity":"ITEM-6",
"name":"Paraphernalia",
"type":"Bundle",
"grouping":[
{
"identity":"ITEM-7",
"name":"Eraser",
"type":"Atomic Unit"
},
{
"identity":"ITEM-8",
"name":"Ruler",
"type":"Atomic Unit"
},
{
"identity":"ITEM-9",
"name":"Compass",
"type":"Atomic Unit"
}
]
}
]
}
]
}
现在我的要求是能够搜索Book
or Pen
orCompass
并且必须能够获取记录ITEM-1
。如何在 Mongo Query 中实现这一点。我在我的数据抽象服务层上使用 Spring Data Mongo Repository 方法。
提前感谢所有帮助。
解决方案
我的要求是能够搜索书籍或笔或指南针,并且必须能够获取记录 ITEM-1。
您可以从 shell 尝试此查询mongo
,它会获取文档:
var SEARCH_ITEMS = [ "Book", "Pen", "Compass" ]
var ATOMIC = "Atomic Unit"
db.collection.find( {
$or: [
{ "type": ATOMIC, name: { $in: SEARCH_ITEMS } },
{ "grouping.type": ATOMIC, "grouping.name": { $in: SEARCH_ITEMS } },
{ "grouping.grouping.type": ATOMIC, "grouping.grouping.name": { $in: SEARCH_ITEMS } },
{ "grouping.grouping.grouping.type": ATOMIC, "grouping.grouping.grouping.name": { $in: SEARCH_ITEMS } }
]
} )
推荐阅读
- node.js - Heroku + MERN 堆栈 - 任何值的 HTTP POST 请求无效
- c# - 在 C# 的 WinPE10 中接收 WM_QueryEndSession 或 WM_WTSSESSIONCHANGE
- javascript - dataTables - 如何使所有列在“draw.dt”上可排序
- javascript - 排队回调函数然后等待它们的执行
- python - 在 scipy.spatial.Delaunay python 中找到一个点的所有单纯形
- jekyll - 如何在带有 Liquid 模板语言的 if 语句中使用 for 循环?
- r - R/Shiny 直方图类作为反应性
- javascript - Ajax 未在 laravel 控制器中发布
- python - Pandas:返回值的第一个实例和最后一个实例的索引值
- android-studio - adb 可以识别但 Chrome 开发工具无法识别的 Android 设备