MongoDB聚合:根据区分大小写返回不同的结果

时间:2018-07-28 00:25:37

标签: mongodb aggregation-framework

我有一个 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

谢谢!

0 个答案:

没有答案