是否可以投影子数组并将它们作为一个数组检索?

Is it possible to project sub arrays and retrieve them as one array?

从 mongo 示例中假设我们有一个这样的集合;

{ "_id" : 1, "semester" : 1, "grades" : [ 70, 87, 90 ] }
{ "_id" : 2, "semester" : 1, "grades" : [ 90, 88, 92 ] }
{ "_id" : 3, "semester" : 1, "grades" : [ 85, 100, 90 ] }
{ "_id" : 4, "semester" : 2, "grades" : [ 79, 85, 80 ] }
{ "_id" : 5, "semester" : 2, "grades" : [ 88, 88, 92 ] }
{ "_id" : 6, "semester" : 2, "grades" : [ 95, 90, 96 ] }

然后查询是这样的;

db.students.find( { semester: 1, grades: { $gte: 85 } },
                  { "grades.$": 1 } )

由此产生的结果;

{ "_id" : 1, "grades" : [ 87 ] }
{ "_id" : 2, "grades" : [ 90 ] }
{ "_id" : 3, "grades" : [ 85 ] }

我想要这样的结果;

{"grades": [87, 90, 85]}

在一个阵列上。

我实现的 c# 代码给了我 LogLists 数组,代码与上面不同,但操作完全相同;

 var result = collectionServerName.Find(x => x.LogList.Any(p => p.Ip.Contains("192")))
     .Project(Builders<ServerName>.Projection.Exclude("_id").Include("LogList"))
     .ToList();

我试过以下代码;

var result = collectionServerName.Find(x => x.LogList.Any(p => p.Ip.Contains("192"))).Project(t => t.LogList.SelectMany(k => k)).ToList(); 

但它给了我以下 SelectMany

的编译错误
The type arguments for method 'Enumerable.SelectMany<TSource, TResult>(IEnumerable<TSource>, Func<TSource, IEnumerable<TResult>>)' cannot be inferred from the usage. Try specifying the type arguments explicitly

如果我只使用 Select ;

var result = collectionServerName.Find(x => x.LogList.Any(p => p.Ip.Contains("192"))).Project(t => t.LogList.Select(k => k)).ToList();

结果类型是 List<IEnumarable<Log>>,我不打算这样

我需要一个数组的原因是我必须在检索结果之前对结果进行分页。我正在使用 C#。任何帮助将不胜感激。

这个 c# 怎么样?

对于一个 Enumerable 中的所有年级

collection .AsQueryable() .SelectMany(x => x.grades);

对于分页,只需添加 Skip(10)、Take(10) 扩展方法。