我是 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" }
謝謝
uj5u.com熱心網友回復:
當你傳遞_id: 0的$project階段,它不會專案,即使他們在隨訪投影的副物件,因為該規則將被覆寫。
嘗試以下$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,
}
}
])
uj5u.com熱心網友回復:
您的組標準可能太窄了。
該$group階段將為該_id欄位的每個不同值創建一個單獨的輸出檔案。問題中的管道將僅包含同一組中的兩個輸入檔案,如果它們在所有四個欄位中具有完全相同的值。
為了使計數大于 1,必須存在 2 個具有相同用戶、模式和完全相同的開始和結束的檔案。
在您顯示的相同資料中,沒有兩個檔案屬于同一組,因此 $group 階段的所有輸出檔案的計數為1,因此它們都不滿足 $match,并且回傳是一個空串列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/326157.html
