我有一个 events 集合,该集合在所有三个级别[ events , events.results 中嵌套了 time 字段。 >和 events.results.results ]
{ '_id': ObjectId('5b5a1a0e1667292602615a85'),
events: [
{
'results': [
{
'name': 'some name A',
'results': [
{ 'text': 'some text A1',
'time': u'1532631565.28'},
{
'text': 'some text A2',
'time': u'1532631532.11'}
]
},
{
'name': 'some name B',
'results': [
{ 'text': 'some text B1',
'time': u'1532631433.20'},
{
'text': 'some text B2',
'time': '1532631235.19'}
]
}
],
'text': 'some title',
'time': '1532631563.6'}
],
'time': '1532631560.44'
}
我可以使用 $ or 和 $ match 这三个级别的结果来找到某些事件文档的匹配项,例如
db.events.aggregate([{"$match":{"$or":[{"time":"1532631563.6"},{"events.time":"1532631563.6"},{"events.results.results.time":"1532631563.6"}]}}])
这使整个文档无论时间匹配在哪个级别。
我想要的是仅带时间匹配的子文档,例如:
如果搜索时间:“ 1532631560.44”
结果:整个文档都与顶级匹配
{ '_id': ObjectId('5b5a1a0e1667292602615a85'),
events: [
...
]}
如果搜索时间:“ 1532631563.6”
**结果:携带第二级子文档**
{
'results': [
{
'name': 'some name A',
'results': [
{ 'text': 'some text A1',
'ts': u'1532631565.28'},
{
'text': 'some text A2',
'ts': u'1532631532.11'}
]
},
{
'name': 'some name B',
'results': [
{ 'text': 'some text B1',
'ts': u'1532631433.20'},
{
'text': 'some text B2',
'ts': '1532631235.19'}
]
}
],
'title': 'some title',
'time': '1532631563.6'}
如果搜索时间:“ 1532631235.19”
结果:携带最低级别的子文档
{
'text': 'some text B2',
'ts': '1532631235.19'}
我正在使用MongoDB 3.4
谢谢!