【问题标题】:Pymongo - aggregating from two databasesPymongo - 从两个数据库聚合
【发布时间】:2018-06-25 14:25:17
【问题描述】:

这里是菜鸟。我需要获得一份汇总了来自两个数据库的两个集合的报告。试图解决这个问题,但失败了。我发现的示例用于聚合来自同一数据库的两个集合。

集合 1

SweetsResults = client.ItemsDB.sweets

收集糖果:_id、类型、颜色

收藏2

SearchesResults = client.LogsDB.searches

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

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

任何帮助将不胜感激。

谢谢。

【问题讨论】:

    标签: python mongodb pymongo aggregation


    【解决方案1】:

    您可以在 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)
    });
    

    【讨论】:

      【解决方案2】:

      @Veeram answer 中的完全相同,但使用 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)
      

      【讨论】:

        猜你喜欢
        • 2020-01-15
        • 1970-01-01
        • 2021-12-31
        • 1970-01-01
        • 1970-01-01
        • 2019-01-22
        • 1970-01-01
        • 2015-03-16
        • 1970-01-01
        相关资源
        最近更新 更多