在MongoDB中搜索数组数组时完全匹配

时间:2015-04-15 21:13:43

标签: mongodb

我有两个问题。我找到了类似的东西,但我无法适应我的问题。

query = {'$and': [{'cpc.class': u'24'},
                  {'cpc.section': u'A'},
                  {'cpc.subclass': u'C'}]}

系列:

       {"_id":1, 
        "cpc": 
         [{u'class': u'24',
          u'section': u'A',
          u'subclass': u'B'}, 
        {u'class': u'07',
          u'section': u'C',
          u'subclass': u'C'},]}
       {"_id":2, 
        "cpc": 
         [{u'class': u'24',
          u'section': u'A',
          u'subclass': u'C'}, 
        {u'class': u'07',
          u'section': u'K',
          u'subclass': u'L'},]}

在此查询中,将提取两个文档。

1)但是我想只获取第二个文档(" _id":2),因为它与查询完全匹配。也就是说,第二个文档包含一个cpc元素,它的类等于24,它的部分等于A,它的子类等于C.

2)我想在可能的情况下只获取cpc的匹配元素?否则我必须遍历每个检索到的文件的所有元素;如果我遍历并试图找出哪个元素完全匹配,那么我的第一个问题将毫无意义。

谢谢!

1 个答案:

答案 0 :(得分:1)

1)您正在寻找$elemMatch operator整体比较子文档,并且更简洁,然后单独的子元素查询(您不需要查询中的$and方式):

query = { 'cpc' : { 
               '$elemMatch': { 'class': u'24',
                                'section': u'A',
                                'subclass': u'C' } } };

2)可以使用投影来完成:

db.find(query, { "cpc.$" : 1 })

$ projection operator documentation几乎包含了这个用例作为示例。