从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#。任何帮助,将不胜感激。
尝试使用'.SelectMany(...)'。 – Enigmativity
我看不到任何代码,你在使用'SelectMay'。请包括将您的问题*复制到您的问题*所需的所有信息。当你的问题的任何修订版本中的评论和你的实际代码和解释/错误都不相同时,特别难以理解你的意思。 – HimBromBeere
我编辑的问题 – Ktt