簡體   English   中英

PyMongo 不返回聚合結果

[英]PyMongo not returning results on aggregation

我是 PyMongo 的初學者。 我正在嘗試查找多次注冊的活動。 此代碼返回一個空列表。 你能幫我找出錯誤嗎:

rows = self.db.Activity.aggregate( [
    
    { '$group':{ 
        "_id": 
            {
                "user_id": "$user_id",  
                "transportation_mode": "$transportation_mode", 
                "start_date_time": "$start_date_time",
                "end_date_time": "$end_date_time"
            },           
        "count": {'$sum':1}
        }
    },
    
    {'$match': 
        { "count": { '$gt': 1 } }
    },
    
    {'$project': 
        {"_id":0,
        "user_id":"_id.user_id", 
        "transportation_mode":"_id.transportation_mode",  
        "start_date_time":"_id.start_date_time",
        "end_date_time":"_id.end_date_time",
        "count": 1

        }
    }
    ]
    )

來自數據庫的 5 行:

{ "_id" : 0, "user_id" : "000", "start_date_time" : "2008-10-23 02:53:04", "end_date_time" : "2008-10-23 11:11:12" }

{ "_id" : 1, "user_id" : "000", "start_date_time" : "2008-10-24 02:09:59", "end_date_time" : "2008-10-24 02:47:06" }

{ "_id" : 2, "user_id" : "000", "start_date_time" : "2008-10-26 13:44:07", "end_date_time" : "2008-10-26 15:04:07" }

{ "_id" : 3, "user_id" : "000", "start_date_time" : "2008-10-27 11:54:49", "end_date_time" : "2008-10-27 12:05:54" }

{ "_id" : 4, "user_id" : "000", "start_date_time" : "2008-10-28 00:38:26", "end_date_time" : "2008-10-28 05:03:42" }

謝謝

當您在$project階段傳遞_id: 0 ,即使它們在后續中被投影,它也不會投影子對象,因為規則被覆蓋。

試試下面的$project階段。

{
  '$project': {
    "user_id":"_id.user_id", 
    "transportation_mode":"_id.transportation_mode",  
    "start_date_time":"_id.start_date_time",
    "end_date_time":"_id.end_date_time",
    "count": 1
  }
}
rows = self.db.Activity.aggregate( [
  {
    '$group':{
      "_id": {
        "user_id": "$user_id",  
        "transportation_mode": "$transportation_mode", 
        "start_date_time": "$start_date_time",
        "end_date_time": "$end_date_time"
        },           
      "count": {'$sum':1}
      }
  },
  {
    '$match':{
      "count": { '$gt': 1 }
    }
  },
  {
    '$project': {
      "user_id":"_id.user_id", 
      "transportation_mode":"_id.transportation_mode",  
      "start_date_time":"_id.start_date_time",
      "end_date_time":"_id.end_date_time",
      "count": 1,
    }
  }
])

您的組標准可能太窄了。

$group階段將為_id字段的每個不同值創建一個單獨的輸出文檔。 問題中的管道將僅包含同一組中的兩個輸入文檔,如果它們在所有四個字段中具有完全相同的值。

為了使計數大於 1,必須存在 2 個具有相同用戶、模式和完全相同的開始和結束的文檔。

在您顯示的相同數據中,沒有兩個文檔屬於同一組,因此 $group 階段的所有輸出文檔的計數為1 ,因此它們都不滿足 $match,並且返回是一個空列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM