的聚合框架是你想要的這裏。不僅用於「彙總」,還用於「操縱」文件。所以基本上你需要$add
運營商和$sort
管道來獲得你想要的結果。
帶我幾分鐘時間來啓動一個Visual Studio中,所以這裏是殼形式,是不是很難翻譯:
db.collection.aggregate([
{ "$project": {
"item": 1,
"category": 1,
"mobileView": 1,
"webView": 1,
"totalView": { "$add": [ "$mobileView", "$webView" ] }
}},
{ "$sort": { "totalView": -1 } }
])
所以基本上「計算」字段,然後使用「投影「作爲字段的結果爲$sort
。
只是BSON文件,所以它不應該很難。
專門針對C#語法做這樣的事情:
var project = new BsonDocument {
{
"$project",
new BsonDocument()
.Add("item", 1)
.Add("category", 1)
.Add("mobileView", 1)
.Add(
"totalView",
new BsonDocument()
.Add("$add", new BsonArray {
"$mobileView", "$webView"
})
)
}
};
var sort = new BsonDocument {
{
"$sort",
new BsonDocument {
{ "totalView", -1 }
}
}
};
var pipeline = new[] { project, sort };
var results = collection.Aggregate(pipeline);
所有$project
項目就如同用$group
是「明確的」命名字段級輸出,包括。在聚合框架中,您想要的字段是「全部或全部」,您必須指定您希望在下一個管道階段或實際上在管道末端可見的每個字段。就管道而言,未提及的字段不再存在。
認爲unix風格的「管道」|
您可以將一個命令的結果「鏈接」到另一個命令,這是對這裏發生的事情的明確比喻。
「$ project」和「 1'在文檔中的每個屬性中?我應該如[在這裏]創建一個新的'BsonDocument'(http://mikaelkoskinen.net/mongodb-aggregation-framework-examples-in-c/)。然後像這樣使用Aggregate? 'var results = collection.Aggregate(project).SetSortOrder(SortBy.Descending(「TotalView」))。SetLimit(10).ToList();' – Kyojimaru 2014-09-01 10:26:00
@Kyojimaru在[]中的所有內容都是個人BSON文件。因此,「Aggregate」的參數是BSON文檔的「列表」。 LINQ方法在這裏不適用,因爲所有內容都在「管道」中指定。如果現在很難理解,我可以嘗試用簡潔的例子來到那裏。正如我所說,將需要釋放空間並啓動Visual Studio來確認語法。所以我花了一些時間來表達我並不總是這樣做的事情。 – 2014-09-01 10:30:09
我想我已經知道如何在使用'MongoVue'後使用它,但仍然無法轉換爲使用'C#'上的語法。將閱讀更多關於如何在'C#'明天早晨內正確地編寫語法,並感謝指導。如果你可以確認'C#'中的語法,我會非常感激。 – Kyojimaru 2014-09-01 10:52:32