我有一个c#类是一个庞大的集合:
public class Usuario_Series_Episodios
{
public void Dispose()
{
GC.SuppressFinalize(this);
}
[BsonId]
public ObjectId _id { get; set; }
public int Usuario_Id { get; set; }
public int Serie_Id { get; set; }
public IList<EpisodiosVistos> EpisodiosVistos { get; set; }
}
public class Episodes : Entity
{
public virtual int User_Id { get; set; }
public virtual string User_Name { get; set; }
public virtual int Serie_Id { get; set; }
public virtual string Cod_Serie { get; set; }
public virtual int Episode { get; set; }
public virtual string Cod_Eps { get; set; }
public virtual DateTime Date { get; set; }
}
我需要查询按照系列分组的上周观看次数最多的剧集,我的结果需要按降序排序如下:
Serie_id - 剧集 - 计数
1 -------------- 2 ---------- 20
3 -------------- 4 ---------- 19
1 -------------- 3 ---------- 18
所以我做了以下代码:
var collection =db.GetCollection<BsonDocument>("Usuario_Series_Episodios");
var aggregate = collection.Aggregate()
.Group(
new BsonDocument {
{ "_id", "$EpisodiosVistos.Serie_Id" },
{ "episodio", "$EpisodiosVistos.Episode" },
{ "count", new BsonDocument("$sum", 1) }
});
var results = await aggregate.SortByDescending(bson => bson["count"]).ToListAsync();
但出现以下错误:
有人可以帮帮我吗?命令聚合失败:组聚合字段'episodio'必须是 定义为对象内的表达式。
答案 0 :(得分:1)
我不太熟悉MongoDB的.NET驱动程序,但下面是这个想法:
var aggregate = collection.Aggregate()
.Group(
new BsonDocument {
{ "_id", new BsonDocument{{ "series", "$Serie_Id"}, { "episodio", "$EpisodiosVistos.Episode" }} },
{ "count", new BsonDocument("$sum", 1) }
});
如果要按多个字段进行分组,则需要将它们都包含在_id
字段中以进行分组。之后的所有字段都是需要表达某种类型的累加器,这就是编译器抱怨episodio
不是表达式的原因。