2013-02-08 3 views
1

Мое дело в следующем: у меня есть документ с массивом документов внутри него, представляющий приложения, к которым пользователь присоединился (как показано на рисунке).Как получить только один конкретный элемент из массива поддокумента?

Document Example

мне нужно получить только один документ на пользователя по имени приложения ... Я написал следующий код и он работает ... Но он извлекает все приложения. Как это сделать, только один?

public Application GetUserApplication(string username) 
     { 
      var query = Query.And(Query.EQ("UserName", username), Query.ElemMatch("Applications", 
       Query.EQ("Key", this.applicationKey))); 

      MongoCursor<BsonDocument> cursor = this.users.FindAs<BsonDocument>(query); 

      cursor.SetFields(new string[]{ "Applications" }); 
      cursor.SetLimit(1); 

      var it = cursor.GetEnumerator(); 

      var apps = it.MoveNext() ? it.Current["Applications"].AsBsonArray : null; 

      ... 
     } 

ответ

5

Вам нужно добавить позиционный оператор $ к вашей проекции SetFields, чтобы определить индекс совпавшего элемента:

cursor.SetFields(new string[]{ "Applications.$" }); 

Кстати, вы можете использовать более упорядоченный синтаксис:

cursor.SetFields("Applications.$"); 
+0

Большое спасибо! :) –

Смежные вопросы