问题描述:
我需要在MongoDB中查询之间的匹配: groups = ['groupa', 'groupb'...]
mongoengine - 使用管道使用<code>mongoengine</code></p> <p>我有一个包含组列表的文件找到2个阵列
另外,我有其他组列表my_groups= ['groupc', 'groupd', 'groupc'...]
想要的结果是找到所有在这些数组之间具有匹配性的文档。
我看到这个question但它不是通过mongoengine
我如何能做到这一点通过mongoengine
?
答
将纯粹的MongoDB查询适配到Mongoengine是很容易的。假设您的收藏被命名为Foo
,字段命名为groups
,并且你有比较列表赋给变量my_groups
从mentioned answer查询将看起来像这样
Foo.objects.aggregate(*[
{ "$match": { "groups.1": { "$exists": True } } },
{ "$redact": {
"$cond": [
{ "$gte": [
{ "$size": { "$setIntersection": [ "$groups", my_groups ] } },
1
]},
"$$KEEP",
"$$PRUNE"
]
}}
])
请注意列表参数之前的星号。
+0
令人惊叹!如果我想用或扩展这个查询? (这个聚集查询或其他匹配) –
你的意思是*任何匹配*?你是指交叉口吗? – styvane
correct @Styvane –
您需要使用['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