的聚合框架是你想要的这里。不仅用于“汇总”,还用于“操纵”文件。所以基本上你需要$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