mongoengine - 使用管道使用mongoengine

我有一个包含组列表的文件找到2个阵列

问题描述:

我需要在MongoDB中查询之间的匹配: groups = ['groupa', 'groupb'...]mongoengine - 使用管道使用<code>mongoengine</code></p> <p>我有一个包含组列表的文件找到2个阵列

另外,我有其他组列表my_groups= ['groupc', 'groupd', 'groupc'...]

想要的结果是找到所有在这些数组之间具有匹配性的文档。

我看到这个question但它不是通过mongoengine

我如何能做到这一点通过mongoengine

+0

你的意思是*任何匹配*?你是指交叉口吗? – styvane

+0

correct @Styvane –

+0

您需要使用['aggregate()'](http://docs.mongoengine.org/apireference.html#mongoengine.queryset.QuerySet.aggregate)方法来执行此操作,如[here]所示http://stackoverflow.com/questions/37725694/find-documents-whose-array-field-contains-at-least-n-elements-of-a-given-array) – styvane

将纯粹的MongoDB查询适配到Mongoengine是很容易的。假设您的收藏被命名为Foo,字段命名为groups,并且你有比较列表赋给变量my_groupsmentioned answer查询将看起来像这样

Foo.objects.aggregate(*[ 
      { "$match": { "groups.1": { "$exists": True } } }, 
      { "$redact": { 
       "$cond": [ 
        { "$gte": [ 
         { "$size": { "$setIntersection": [ "$groups", my_groups ] } }, 
         1 
        ]}, 
        "$$KEEP", 
        "$$PRUNE" 
       ] 
      }} 
     ]) 

请注意列表参数之前的星号。

+0

令人惊叹!如果我想用或扩展这个查询? (这个聚集查询或其他匹配) –