提问人:SeYeD.Dev 提问时间:11/6/2023 最后编辑:S.BSeYeD.Dev 更新时间:11/6/2023 访问量:314
如何将mongodb聚合管道转换为aggify查询
how can I convert mongodb aggregate pipeline to aggify query
问:
将 json 管道转换为 Aggify 查询
这是我的管道,我怎样才能将其转换为Aggify查询
我需要通过使用 aggify 生成器(一个 python 包)来简化我的一些查询,以便可以读取它并且我可以更快地查询。但是我在某些方面有问题,比如这个问题,有点复杂
加重 : https://github.com/Aggify/aggify
from mongoengine import Document, fields
class DiscussionDocument(Document):
network_id = fields.ObjectIdField()
post = fields.ReferenceField('PostDocument', db_field='post_id')
parent = fields.ReferenceField('self', db_field='parent_id')
owner = fields.ReferenceField('AccountDocument', db_field='owner_id')
body = fields.StringField()
stat = fields.EmbeddedDocumentField(DiscussionStat)
is_pinned = fields.BooleanField()
weight = fields.IntField()
deleted_at = fields.LongField()
meta = {
'collection': 'discussion',
'indexes': ['post', 'parent', 'owner', 'deleted_at'],
'ordering': ['-_id'],
}
pipeline = [
{'$match': {'owner_id': ObjectId(account_id)}},
{
'$lookup': {
'from': 'discussion',
'let': {'id': '$_id'},
'pipeline': [
{
'$match': {
'$expr': {
'$and': [
{'$eq': ['$parent_id', '$$id']},
{'$ne': ['$owner_id', ObjectId(account_id)]},
]
}
}
}
],
'as': 'replies',
}
},
]
答:
4赞
leonard
11/6/2023
#1
aggify = Aggify(DiscussionDocument)
query = aggify.filter(owner=ObjectId(account_id)).lookup(
DiscussionDocument,
let=["id"],
query=[Q(parent_id="id") & Q(owner_id=ObjectId(account_id))],
as_name="replies"
)
要添加匹配阶段,您应该使用方法(如 Django),然后使用您的字段名称,Aggify 会将其更改为db_field它自己。
要添加查找阶段,只需使用 method 和 use 参数来传递 let 值,然后使用 parameter 来编写查询。
在 Query 中,可以将任一函数与所需的运算符一起使用,也可以使用 Object 并添加新管道进行查询。最后,您应该用于在此查找中创建的新字段。我希望这对你有所帮助。filter
lookup
let
query
Q
Aggify
as_name
0赞
Ajaj Ali
11/6/2023
#2
如果你想生成你的原始到python语言。
您可以使用 .Aggregation pipeline
MongoDB Compass
您可以在其中将原始查询导出为任何语言支持的格式。
它由选项组成,如,等。JAVA
Python3
NODE
希望它有所帮助。
评论
0赞
SeYeD.Dev
11/6/2023
我需要 Aggify 查询,因为它是一个非常好的包,它确实清理了代码
评论
@seyed-dev