2016-10-18 9 views
1

私はドキュメントを持って、私が持っているすべての文書を必要とする。これは、これはその文書Mongo Documentで辞書を検索する方法は?

/* 1 */ 
{ 
    "_id" : ObjectId("5805c1ced520b54bd4192214"), 
    "User" : [ 
     [ 
      NumberLong(1), 
      { 
       "Name" : "FirstUser", 
       "_id" : NumberLong(1) 
      } 
     ] 
    ] 
} 

/* 2 */ 
{ 
    "_id" : ObjectId("5805c1ced520b54bd4192215"), 
    "User" : [ 
     [ 
      NumberLong(1), 
      { 
       "Name" : "SecondUser", 
       "_id" : NumberLong(2) 
      } 
     ] 
    ] 
} 


/* 3 */ 
{ 
    "_id" : ObjectId("5805c1ced520b54bd4192216"), 
    "User" : [ 
     [ 
      NumberLong(1), 
      { 
       "Name" : "ThirdUser", 
       "_id" : NumberLong(3) 
      } 
     ] 
    ] 
} 


/* 4 */ 
{ 
    "_id" : ObjectId("5805c1ced520b54bd4192217"), 
    "User" : [ 
     [ 
      NumberLong(1), 
      { 
       "Name" : "FourthUser", 
       "_id" : NumberLong(2) 
      } 
     ] 
    ] 
} 

のための私のBSON構造である文書のための私のC#の構造

public class MetaData 
{ 
    [BsonId] 
    public ObjectId _Id { get; set; } 
    [BsonElement("User")] 
    public IDictionary<Int64, FirstUser> User { get; set; } 
} 

public class FirstUser 
{ 
    [BsonElement("Name")] 
    public String Name { get; set; } 
    [BsonElement("Id")] 
    public Int64 Id { get; set; } 
} 

ある

の下に表示「名前」を「FirstUser」とします。これはどのようにしてMONGO QUERYを作成しますか?

+0

あなたのBSONスキーマとあなたのクラスはしていないようですあなたのBSONは辞書の代わりにオブジェクト配列の配列として "User"を持っているようです。 –

+0

Aggregation Frameworkを使用して解決することを提案できますか?はいの場合は、私はあなたに答えを書くことができます。 –

+0

私はすでにうまく機能していて飽き飽きしていますが、ここで問題となるのは16MB以上は取得できないことです。いくつかの時間は、私は16 MB以上をフェッチする必要があります。 –

答えて

1

ここでの問題は、辞書キーが数字であることです。通常、"User.1.Name": "FirstUser"のようなものを使用しますが、この構文は実際には他のものを実行します。を持つUserの2番目の要素を探します(インデックスはゼロベースなので)。

Userにキーが1つしかない場合は、"User.0.Name": "FirstUser"を使用できます。

+0

これはうまくいきますが、ここで問題となるのは、ユーザーは常に辞書の中で最初に来るとは言えません。 –

+0

あなたのスキーマの例を教えてもらえますか? – Tomer

0

あなたは以下を使用してのmongoシェルからそれを行うことができます。

db.collection.find({'User.Name': 'FirstUser'}); 

それとも、次の操作を行うことができますC#のドライバーから:

var c = await wat.FindAsync(x => x.User[0].Name == "FirstUser"); 
var metaData = await c.ToListAsync(); 
+0

実際に私はmongoクエリが必要です。なぜなら、最初に私はクエリを作成してから、私はその文書を取ろうとします。それを作る方法 –

関連する問題