2017-08-08 78 views
0

从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]} 

在一个阵列上。我执行的代码给了我一个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 

如果我只用选择;

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#。任何帮助,将不胜感激。

+0

尝试使用'.SelectMany(...)'。 – Enigmativity

+1

我看不到任何代码,你在使用'SelectMay'。请包括将您的问题*复制到您的问题*所需的所有信息。当你的问题的任何修订版本中的评论和你的实际代码和解释/错误都不相同时,特别难以理解你的意思。 – HimBromBeere

+0

我编辑的问题 – Ktt

回答

0

这对于c#来说怎么样?

对于所有级别在一个可枚举

收集 .AsQueryable() .SelectMany(X => x.grades);

而对于分页只是添加跳过(10),采取(10)扩展方法。

+0

似乎工作。谢谢! – Ktt

相关问题