2014-09-08 1 views
0

Мой документ выглядит следующим образом:Запрашивание массив массивов с драйвером MongoDB C#

"ID" : "fruit1", 
"Keys" : [ 
      ["apple", "carrot"] 
      ["banana"] 
     ] 

Как запросить Кис = «морковь», используя драйвер MongoDB C#?

я могу это сделать в скорлупе:

db.multiArr.find({'Keys':{$elemMatch:{$elemMatch:{$in:['carrot']}}}}) 

Я нашел его здесь: Querying an array of arrays in MongoDB

Но я не преуспеваем написал его, используя C# драйвер.

+0

возможный дубликат [Использование как $ в и $ elemMatch с помощью C# Driver] (HTTP: // stackoverflow.com/questions/22176263/using-both-in-and-elemmatch-using-the-c-sharp-driver) – i3arnon

+0

В основном вы не можете безопасным способом. – i3arnon

ответ

0

мне удастся что-то не очень biutifull:

var q = Query.ElemMatch("Keys", Query.In("$elemMatch", new List<BsonValue> { "carrot" })); 
+0

Как можно запросить массив Keys, если это массив объектов вместо массива строк? – Misi

0

Попробуйте что-нибудь подобное.

Примечание: я не тестировал это.

MongoClient client = new MongoClient(); // connect to localhost 
MongoServer server = client.GetServer(); 
var db = server.GetDatabase("foo"); 
var col = db.GetCollection<RawBsonDocument>("multiArr"); 

// Query = {'Keys':{$elemMatch:{$elemMatch:{$in:['carrot']}}}} 
BsonDocument query = new BsonDocument{ 
    "Keys", new BsonDocument { 
     "$elemMatch", new BsonDocument { 
      "$elemMatch", new BsonDocument { 
       "$in", new BsonArray().Add("carrot") 
      } 
     } 
    } 
}; 
col.Find(query); 

Подробнее: http://docs.mongodb.org/ecosystem/tutorial/use-csharp-driver/#csharp-driver-tutorial