Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pymongo-从两个数据库聚合_Python_Mongodb_Pymongo_Aggregation - Fatal编程技术网

Python Pymongo-从两个数据库聚合

Python Pymongo-从两个数据库聚合,python,mongodb,pymongo,aggregation,Python,Mongodb,Pymongo,Aggregation,这里没有。我需要得到一份报告,该报告是来自两个数据库的两个集合的集合。我试图对这个问题绞尽脑汁,但失败了。我发现的示例是聚合来自同一数据库的两个集合 系列1 SweetsResults=client.ItemsDB.sweets 收集糖果:\标识、类型、颜色 收藏2 SearchesResults=client.LogsDB.searches 集合搜索:_id、时间戳、类型、颜色 我需要的报告将列出类型“candy”中的所有糖果,以及糖果集合中列出的所有颜色,对于每一行,搜索任何可用的“cand

这里没有。我需要得到一份报告,该报告是来自两个数据库的两个集合的集合。我试图对这个问题绞尽脑汁,但失败了。我发现的示例是聚合来自同一数据库的两个集合

系列1

SweetsResults=client.ItemsDB.sweets

收集糖果:\标识、类型、颜色

收藏2

SearchesResults=client.LogsDB.searches

集合搜索:_id、时间戳、类型、颜色

我需要的报告将列出类型“candy”中的所有糖果,以及糖果集合中列出的所有颜色,对于每一行,搜索任何可用的“candy”+颜色组合的次数(计数)

任何帮助都将不胜感激


谢谢。

您可以在mongo shell中使用以下脚本

获取每种类型的不同颜色,然后是每种类型和颜色组合的计数

var itemsdb = db.getSiblingDB('ItemsDB');
var logsdb = db.getSiblingDB('LogsDB');

var docs = [];
itemsdb.getCollection("sweets").aggregate([
    {$match:{"type":"candy"}},
    {$group: {_id:{type:"$type", color:"$color"}},
    {$project: {_id:0, type:"$_id.type", color:"$_id.color"}}
]).forEach(function(doc){ 
    doc.count = logsdb.getCollection("searches").count({ "type":"candy","color":doc.color});
    docs.push(doc)
});

您可以在mongo shell中使用以下脚本

获取每种类型的不同颜色,然后是每种类型和颜色组合的计数

var itemsdb = db.getSiblingDB('ItemsDB');
var logsdb = db.getSiblingDB('LogsDB');

var docs = [];
itemsdb.getCollection("sweets").aggregate([
    {$match:{"type":"candy"}},
    {$group: {_id:{type:"$type", color:"$color"}},
    {$project: {_id:0, type:"$_id.type", color:"$_id.color"}}
]).forEach(function(doc){ 
    doc.count = logsdb.getCollection("searches").count({ "type":"candy","color":doc.color});
    docs.push(doc)
});
与中完全相同,但使用python:

uri = 'mongodb://localhost'
client = MongoClient(uri)
items_db = client.get_database('ItemsDB')
logs_db = client.get_database('LogsDB')

docs = []
aggr = items_db.get_collection('sweets').aggregate([
    {'$match': {"type": "candy"}},
    {'$group': {'_id': {'type': "$type", 'color': "$color"}}},
    {'$project': {'_id': 0, 'type': "$_id.type", 'color': "$_id.color"}},
])
for doc in aggr:
    doc['count'] = logs_db.get_collection("searches").count({"type": "candy", "color": doc['color']})
    docs.append(doc)
与中完全相同,但使用python:

uri = 'mongodb://localhost'
client = MongoClient(uri)
items_db = client.get_database('ItemsDB')
logs_db = client.get_database('LogsDB')

docs = []
aggr = items_db.get_collection('sweets').aggregate([
    {'$match': {"type": "candy"}},
    {'$group': {'_id': {'type': "$type", 'color': "$color"}}},
    {'$project': {'_id': 0, 'type': "$_id.type", 'color': "$_id.color"}},
])
for doc in aggr:
    doc['count'] = logs_db.get_collection("searches").count({"type": "candy", "color": doc['color']})
    docs.append(doc)