我的 MongoDB 集合中有一堆檔案。我確實撰寫了一個聚合代碼來查找和過濾一些檔案。一切都很好,但結果是隨機顯示的。
結果是,您會看到物體和聊天源以隨機順序顯示。
期望的結果是按升序顯示物體和聊天源,如下所示:
Entity 1 Chat Source 1
Entity 1 Chat Source 2
Entity 1 Chat Source 3
Entity 2 Chat Source 1
Entity 2 Chat Source 2
Entity 2 Chat Source 3
Entity 3 Chat Source 1
Entity 3 Chat Source 2
Entity 3 Chat Source 3
我嘗試了兩種排序方式。
第一種方式,在聚合代碼內部:
if total_messages > 0:
agg_result = mycol.aggregate([
{
"$match": {
"creation_date_time": {"$gte": start, "$lt": end}
}
},
{
"$group": {
"_id": {"Entity": "$entity", "Chat Source": "$chat_source"},
"Count": {"$sum": 1},
"Latest Message Date Time": {"$last": "$date_time"}
}
},
{
"$sort": {"entity": -1, "chat_source": -1}
}
])
這沒有任何改變,并給出了相同的先前輸出。
第二種方法是使用 pymongo 排序:
for response in agg_result:
doc = mycol.find().sort("entity", pymongo.ASCENDING)
print(doc)
這給出了以下結果:
<pymongo.cursor.Cursor object at 0x0000027A59AF9850>
<pymongo.cursor.Cursor object at 0x0000027A59AF9700>
<pymongo.cursor.Cursor object at 0x0000027A59AF9850>
<pymongo.cursor.Cursor object at 0x0000027A59AF9700>
<pymongo.cursor.Cursor object at 0x0000027A59AF9850>
<pymongo.cursor.Cursor object at 0x0000027A59AF9700>
<pymongo.cursor.Cursor object at 0x0000027A59AF9850>
<pymongo.cursor.Cursor object at 0x0000027A59AF9700>
<pymongo.cursor.Cursor object at 0x0000027A59AF9850>
我該如何解決這個問題?
我正在處理的檔案的兩個示例
uj5u.com熱心網友回復:
我懷疑不是
{
"$group": {
"_id": {"Entity": "$entity", "Chat Source": "$chat_source"},
"Count": {"$sum": 1},
"Latest Message Date Time": {"$last": "$date_time"}
}
},
{
"$sort": {"entity": -1, "chat_source": -1}
}
你的意思是對分組Entity Chat Source組合進行排序。在該$group階段之后,將沒有要排序的欄位entity和欄位。chat_source嘗試:
{
"$sort": {"_id.Entity":1, "_id.Chat Source":1}
}
另請注意,您的管道假定在第一個之后,材料按日期時間升序$match流入舞臺,因此使用-- 但也許您的意思是......?除非確實有兩個欄位和.$group$last$creation_date_timedate_timecreation_date_time
"Latest Message Date Time": {"$last": "$creation_date_time"}
uj5u.com熱心網友回復:
您的排序必須在從管道的前一階段傳遞的欄位上,因此在您的情況下將排序更改為(類似于):
{
"$sort": {"_id": -1}
}
在第二個示例中,您誤解了.sort()運算子的作業原理,因此產生了意想不到的結果。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/435825.html
