2013-08-11 3 views
1

Я использую драйвер Withe документ Java, который выглядит следующим образом (реальный тест пример):запрос значение суб документа в MongoDB

{ 
    "_id" : ObjectId("5207fe359b88bfa6f90a82b0"), 
    "meta_id" : "d6eb1b13-50c7-473f-8348-b5a638a542a0", 
    "name" : "Fake Name Inc.", 
    "created" : ISODate("2013-08-11T21:12:21.533Z"), 
    "members" : { 
     "5207fe359b88bfa6f90a82af" : [ 
      "Admin", 
      "User" 
     ] 
    } 
} 

Я хочу, чтобы выбрать массив строк в пути " members.5207fe359b88bfa6f90a82af "(который является списком ролей). Я не понимаю, как это сделать. Похоже, что здесь будет работать проекция, но я достаточно доволен Монго, что способ написания проекции не очевиден.

Я могу, конечно, загрузить весь объект или, возможно, даже поле «члены», но я думаю, что мне нужно будет выбрать именно те данные, которые мне нужны.

Итак, есть ли у кого-нибудь представление о том, как будет выглядеть такой запрос?

Примечание: Этот вопрос предполагает, что, возможно, мне нужно изменить структуру документа, чтобы сделать вещи проще: MongoDB - Query by sub-tree

ответ

3

Вы можете использовать точку в параметре проекции find, чтобы сделать это. В оболочке:

db.test.find(
    {_id : ObjectId("5207fe359b88bfa6f90a82b0")}, 
    {'members.5207fe359b88bfa6f90a82af': 1, _id: 0}) 

возвратов:

{ 
    "members": { 
    "5207fe359b88bfa6f90a82af": [ 
     "Admin", 
     "User" 
    ] 
    } 
} 
+0

Хм ... Я пытался, но, возможно, мой функциональный тест не смотрел на правильные вещи, так как я не ожидал, что всю структуру в Вернись. Что такое «_id: 0» для проекции? –

+0

@BrillPappin Это исключает поле '_id' в возвращаемом документе, поскольку по умолчанию оно включено. – JohnnyHK

+0

Ах, это имеет смысл. Это будет _id самого документа, который, как я думаю, я читаю, возвращается по умолчанию. –

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