【问题标题】:How to use result of a query as match parameter conditions in another query (MongoDB)?如何在另一个查询(MongoDB)中使用查询结果作为匹配参数条件?
【发布时间】:2021-07-03 12:57:39
【问题描述】:

我做了一个聚合查询,查询的结果是这样的:

{ "_id" : "Tom" }
{ "_id" : "Jack" }

我需要在“host_name”字段中显示所有包含 Tom 和 Jack 的记录。我该怎么办?

我尝试将其转换为数组并将其存储在名为 k 的变量中并在匹配聚合中使用它,但似乎不起作用,这就是我所做的:

k = db.abnb.aggregate([{$match: {"host_is_superhost": "t"}}, {$group: {"_id": "$host_name"}}, {$limit: 2} ]);
db.abnb.aggregate([ { $match : { host_name : k } } ])

【问题讨论】:

    标签: database mongodb mongodb-query pymongo


    【解决方案1】:

    将您的查询结果放入列表并使用$in

    from pymongo import MongoClient
    #
    # Set some data up
    #
    db = MongoClient()['mydatabase']
    db.abnb.insert_many([{'host_name': 'Tom'}, {'host_name': 'Dick'}, {'host_name': 'Harry'}, {'host_name': 'Jack'}])
    agg1 = [{"_id": "Tom"}, {"_id": "Jack"}]
    #
    # This is the meat of it
    #
    result = db.abnb.find({'host_name': {'$in': [x['_id'] for x in agg1]}})
    
    print(list(result))
    

    打印:

    [{'_id': ObjectId('606dfa4e4252a193402ce182'), 'host_name': 'Tom'}, {'_id': ObjectId('606dfa4e4252a193402ce185'), 'host_name': 'Jack'}]
    

    【讨论】:

      【解决方案2】:

      host_name 字段是一个临时变量,它只能在您的聚合中访问。

      如果你想保存你的聚合结果,你需要使用$out(see the doc)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-21
        • 2021-02-26
        • 2016-10-08
        • 2022-01-23
        • 1970-01-01
        • 1970-01-01
        • 2014-07-01
        • 1970-01-01
        相关资源
        最近更新 更多