mongoengine支持在聚合方法中查找吗?

时间:2017-11-10 07:48:50

标签: python mongodb mongoengine

我目前正在使用mongodb版本v3.0

这是我的代码:

{'$lookup': {
      'from': 'Matrix',
      'localField': 'account_id',
      'foreignField': 'account_id',
      'as': 'Matrix'
      }
}

我有这个错误:

  

异常调用应用程序:异常:无法识别的管道阶段名称:' $ lookup'

1 个答案:

答案 0 :(得分:0)

使用带有PyMongo的聚合框架进行查询。这需要两个到MongoDB的连接(一个用于PyMongo执行聚合查询,另一个用于常规查询或通过MongoEngine插入或更新)。

但是_get_collection()解决了这个问题。

在下面的示例中,我们使用两个模型Plans和Addons,并且两者的关系都是 quote_id

collection = Plans._get_collection()

    pipeline = [
        {
            "$lookup":               
            {
                "from":"addons",
                "localField":"plans.quote_id",
                "foreignField":"addons.quote_id",
                "as": "addons_docs"
            }
        },
        {
            "$match":{
                "addons_docs":{
                    "$ne":[]
                }
            }
        },
        {
            "$addFields":
            {
                "addons_docs":
                {
                    "$arrayElemAt":["$addons_docs",0]
                }
            }
        },
        {
            "$replaceRoot":
            {
                "newRoot":
                {
                    "$mergeObjects":["$addons_docs","$$ROOT"]
                  
                }
            }
        },
        
        {
            "$project":
            {
                "addons_docs":0
            }
        },
        {
            "$sort":
            {
                "_id":-1
            }
        },
        {
            "$limit":100
        }
    ]
    cursor = collection.aggregate(pipeline)
    try:
        for doc in cursor:
            print(doc)
    finally:
        cursor.close()