Mongoengine聚合$ match主键(_id)不起作用

时间:2018-04-16 13:16:38

标签: python-3.x match aggregate mongoengine

我试图将聚合物与mongoengine一起使用。此外,找出它是如何工作的很有挑战性(因为文档中没有任何内容),我已经取得了一些进展。

但我无法匹配主键:

from mongoengine import *

connect('test')


class User(Document):
    username = StringField()

    def match_test_username(self):
        pipeline = [{ "$match": {"username": self.username} }]
        return User.objects.aggregate(*pipeline)

    def match_test_id(self):
        pipeline = [{ "$match": {"id": self.id} }]
        return User.objects.aggregate(*pipeline)


mary = User(username="mary")
mary.save()
mary.reload()


agg_username = mary.match_test_username
for doc in agg_username():
    print("match_test_username:", doc)

agg_id = mary.match_test_id
for doc in agg_id():
    print("match_test_id:", doc)

如果你运行这个,匹配就是用于用户名(match_test_username),但是我无法使用主键,我已经尝试过键名:_id,pk,id。< / p>

我错了什么?

有没有关于此的文档?我发现的只有:Flask-MongoEngine & PyMongo Aggregation Query非常有用。

还有什么可以帮助,是否有更好的方式(&#34; pythonic方式&#34;)来迭代调查结果?

提前谢谢!

1 个答案:

答案 0 :(得分:0)

您应该在查询中使用ID作为ObjectId。所以你应该这样做:

pipeline = [{ "$match": {"_id": ObjectId(self.id)} }]
return User.objects.aggregate(*pipeline)