2013-02-10 2 views
1

Предположим, я следующая структура документа на коллекции MongoDB:Возможно ли получить только одно конкретное поле поддокумента из массива?

{ 
    "Applications" : [{ 
     "JoinDate" : new Date("10/2/2013 18:06:30"), 
     "Key" : "shtube", 
     "Roles" : ["Administrator", "Moderator"] 
    }], 
    "Comment" : "Cool", 
    "ConfirmationKey" : "981c69fe-6fff-47d6-bb82-3b5f1deeef25", 
    "CreationDate" : new Date("8/2/2013 17:43:42"), 
    ... 
} 

Как я могу получить (для проблемы производительности) только поле «Роли», используя SetFields() метод из MongoCursor? В это время я знаю только, что получить поддокумент и получить доступ к «Ролям». Но мне не нужна вся информация о субдокументе.

ответ

2

Вы можете использовать проекцию для извлечения только поля (ы), которые вы хотите, используя точечную нотацию (с использованием оболочки):

db.myCollection.find({ "Applications.Roles" : { $exists: true } }, 
      { "Applications.Roles" : 1 }) 

В приведенном выше примере, это просто возвращение документов, содержащих приложения. Структура ролей.

Подробнее о проекциях here.

FYI: Вы не можете эффективно выполнять проекцию из C# с помощью LINQ. Он выполняет локальную локацию на клиенте.

Другой альтернативой является использование $ elemMatch (однако в этом случае оно может не соответствовать вашим потребностям, если вы не выполняете конкретный запрос).