2015-11-27 45 views
-1

我的聚集查詢:

db.POLICY.aggregate([ 
    {$group:{_id:"$_id",max:{$max:"$priority"}}}, 
    {$project:{name:1, AppList:1, status:1}},{$limit:1} 
]); 

它給了我只有_id領域的文件。 我錯過了什麼嗎?

+0

這是因爲您在前一階段('$ group')結果中沒有包含這些字段。請你可以展示樣本文件。 – styvane

回答

1

$group的輸出不包含輸入中的任何字段,除非您指定它們。換句話說,$group的輸出將不包含nameAppListstatus。然而,在這種情況下,它將包含_idmax字段。詳細瞭解$group字段here

+0

感謝您的解釋。但我怎樣才能得到使用灌溉的最大優先權文件? –

+0

@sumitchoudhary您的查詢已找到具有最高優先級的文檔。我認爲你想要的不是使用聚合,而是想使用常規查找查詢['$ max'](https://docs.mongodb.org/manual/reference/operator/meta/max/)。 –

+0

是的@David,你說得對,但是當這個查詢將在一分鐘內執行1000次時,性能如何呢? –

1

根據您對上述現有答案的評論,看起來像要獲取具有最高優先級值的文檔。您可以採取的一種方法是使用$first運算符,該運算符從每個組的第一個文檔返回一個值。訂單僅在文檔按照定義的順序定義時才需要定義,因此您需要執行流水線步驟以在$group中執行此操作以訂購輸入文檔。下面的例子說明該方法:

db.POLICY.aggregate([ 
    { "$sort": { "priority": -1 } }, 
    { 
     "$group": { 
      "_id": null, 
      "name": { "$first": "$name" }, 
      "AppList": { "$first": "$AppList" }, 
      "status": { "$first": "$status" }   
     } 
    } 
]) 

上述操作指定零來計算所有輸入文檔作爲一個整體,然後將$first累加器計算用於所述第一nameAppListstatus字段累計值的_id值每個文檔在按priority字段降序排列時,因此會給您提供最多priority的文檔。