如何使用一个查询的结果作为另一个查询(MongoDB)中的匹配参数条件?
How to use result of a query as match parameter conditions in another query (MongoDB)?
我做了一个聚合查询,查询结果是这样的:
{ "_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 } } ])
字段 host_name
是一个临时变量,它只能在您的聚合中访问。
如果您想保存聚合结果,您将需要使用 $out
(see the doc)
将查询结果放入列表并使用 $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'}]
我做了一个聚合查询,查询结果是这样的:
{ "_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 } } ])
字段 host_name
是一个临时变量,它只能在您的聚合中访问。
如果您想保存聚合结果,您将需要使用 $out
(see the doc)
将查询结果放入列表并使用 $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'}]