我的聚集查詢:
db.POLICY.aggregate([
{$group:{_id:"$_id",max:{$max:"$priority"}}},
{$project:{name:1, AppList:1, status:1}},{$limit:1}
]);
它給了我只有_id領域的文件。 我錯過了什麼嗎?
我的聚集查詢:
db.POLICY.aggregate([
{$group:{_id:"$_id",max:{$max:"$priority"}}},
{$project:{name:1, AppList:1, status:1}},{$limit:1}
]);
它給了我只有_id領域的文件。 我錯過了什麼嗎?
$group
的輸出不包含輸入中的任何字段,除非您指定它們。換句話說,$group
的輸出將不包含name
,AppList
或status
。然而,在這種情況下,它將包含_id
和max
字段。詳細瞭解$group
字段here。
感謝您的解釋。但我怎樣才能得到使用灌溉的最大優先權文件? –
@sumitchoudhary您的查詢已找到具有最高優先級的文檔。我認爲你想要的不是使用聚合,而是想使用常規查找查詢['$ max'](https://docs.mongodb.org/manual/reference/operator/meta/max/)。 –
是的@David,你說得對,但是當這個查詢將在一分鐘內執行1000次時,性能如何呢? –
根據您對上述現有答案的評論,看起來像要獲取具有最高優先級值的文檔。您可以採取的一種方法是使用$first
運算符,該運算符從每個組的第一個文檔返回一個值。訂單僅在文檔按照定義的順序定義時才需要定義,因此您需要執行流水線步驟以在$group
中執行此操作以訂購輸入文檔。下面的例子說明該方法:
db.POLICY.aggregate([
{ "$sort": { "priority": -1 } },
{
"$group": {
"_id": null,
"name": { "$first": "$name" },
"AppList": { "$first": "$AppList" },
"status": { "$first": "$status" }
}
}
])
上述操作指定零來計算所有輸入文檔作爲一個整體,然後將$first
累加器計算用於所述第一name
,AppList
和status
字段累計值的_id
值每個文檔在按priority
字段降序排列時,因此會給您提供最多priority
的文檔。
這是因爲您在前一階段('$ group')結果中沒有包含這些字段。請你可以展示樣本文件。 – styvane