2013-06-15 4 views
0

Может кто-нибудь объяснить о выборе части коллекции? У меня есть как вложенная структура, как, например:Как получить данные о деталях коллекций «MongoDB»?

{ 
    some_list : [ 
     { 
      'name': 'Alexander', 
      'tasks': [ 
       'task_1', 
       'task_2', 
      ] 
     }, 
     { 
      'name': 'Stepan', 
      'tasks': [ 
       'task_1', 
       'task_2', 
       'task_3', 
      ] 
     }, 
     { 
      'name': 'Nikolay', 
      'tasks': [ 
       'task_1' 
      ] 
     }, 
     { 
      'name': 'Irina', 
      'tasks': [ 
       'task_1', 
       'task_2' 
      ] 
     } 
    ] 
} 

Как я могу получить задачи Александра только (без ненужных данных)?

+0

все эти задачи в одном _document_? Если вы, как правило, имеете дело только с задачами одного пользователя за раз, есть ли причина не изменять схему для хранения задач каждого пользователя в отдельном документе? в зависимости от того, как вы будете использовать данные, вы можете даже захотеть сохранить каждую задачу в виде отдельного документа. Рассмотрите свои шаблоны чтения и записи перед окончательной доработкой схемы. –

+0

@ asya-kamsky Этот пример не реален :) Это для обучения. –

+0

, так что вы задавали вопрос о возврате части документа (а не части коллекции). Надеюсь, вы заметили, что можно вернуть только первый соответствующий поддокумент. –

ответ

3
coll.find({'some_list.name':'Alexander'},{'some_list.$' : 1, _id : 0}).pretty() 
{ 
    "some_list" : [ 
     { 
      "name" : "Alexander", 
      "tasks" : [ 
       "task_1", 
       "task_2" 
      ] 
     } 
    ] 
} 
0

вам нужно $elemMatch

rsAlgo:PRIMARY> db.algo.find({"some_list.name":"Alexander"},{"some_list":{$elemMatch:{"name":"Alexander"}}}); 
{ "_id" : ObjectId("51bedddfd894dfcb21087fc2"), "some_list" : [ { "name" : "Alexander", "tasks" : [ "task_1", "task_2" ] } ] } 

или использовать .pretty() для объяснения результата

{ 
     "_id" : ObjectId("51bedddfd894dfcb21087fc2"), 
     "some_list" : [ 
       { 
         "name" : "Alexander", 
         "tasks" : [ 
           "task_1", 
           "task_2" 
         ] 
       } 
     ] 
} 
Смежные вопросы