2017-08-08 3 views
0

mongoサンプルから、このようなコレクションがあるとしましょう。サブ配列を投影して1つの配列として取り出すことは可能ですか?

{ "_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]} 

を1つのアレイに含む。

私は実装したコードは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(); 

結果タイプは、私は1つのアレイが、私はそれらを取得する前に結果をページ分割する必要があるように私が必要とする理由

理由を持っているつもりいけないList<IEnumarable<Log>>です。私はC#を使用しています。どんな助けもありがとう。

+0

'.SelectMany(...)'を使ってみてください。 – Enigmativity

+1

あなたは 'SelectMay'を使っているコードを見ることができません。あなたの質問に問題を再現するのに必要なすべての情報を含めてください*。あなたの質問のリビジョンでコメントや実際のコード、例外/エラーが異なる場合、あなたが意味することを得るのは特に難しいです。 – HimBromBeere

+0

私は質問を編集しました – Ktt

答えて

0

C#の場合はどうなりますか? 1つの列挙

コレクション.AsQueryable() .SelectMany(X => x.grades)内のすべてのグレードの

ページングには、Skip(10)、Take(10)拡張メソッドを追加するだけです。

+0

が動作しているようです。ありがとう! – Ktt

関連する問題