如何将mongodb聚合管道转换为aggify查询

how can I convert mongodb aggregate pipeline to aggify query

提问人:SeYeD.Dev 提问时间:11/6/2023 最后编辑:S.BSeYeD.Dev 更新时间:11/6/2023 访问量:314

问:

将 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',
        }
    },
]
python mongodb 聚合

评论

2赞 AKX 11/6/2023
你为什么要问一个关于你是作者的图书馆的问题?(当然,我可能弄错了,在GitHub上完全是其他人。@seyed-dev
0赞 ray 11/6/2023
除了对自我推销的怀疑之外,这个问题本身并不包含具体问题。“如何将代码从这种语言转换为这种语言”是否过于宽泛?

答:

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 并添加新管道进行查询。最后,您应该用于在此查找中创建的新字段。我希望这对你有所帮助。filterlookupletqueryQAggifyas_name

0赞 Ajaj Ali 11/6/2023 #2

如果你想生成你的原始到python语言。 您可以使用 .Aggregation pipelineMongoDB Compass

您可以在其中将原始查询导出为任何语言支持的格式。

它由选项组成,如,等。JAVAPython3NODE

希望它有所帮助。

评论

0赞 SeYeD.Dev 11/6/2023
我需要 Aggify 查询,因为它是一个非常好的包,它确实清理了代码