2013-10-15 2 views
1

У меня есть сложный объект, здесь представляет собой упрощенный вариант, чтобы показать, что я пытаюсь сделать первым ...Возврат документа без поддокументов в MongoDB

books: [{ 
title: 'book 1', 
    authors: [ 
    { name: 'jim' }, 
    { name: 'bob' }, 
    ] 
}, { 
    title: 'book 2', 
    authors: [ 
    { name: 'steve' }, 
    { name: 'joe' }, 
    ] 
}]; 

Ok, так что в основном то, что я хочу сделать возвращает список книг без авторов. Это не фактический элемент, я просто использую его как простой пример, но давайте просто скажем, что я хочу запросить все книги или, может быть, 200 книг. В этом списке я не хочу, чтобы каждая из книг содержала всех авторов, в дополнительном документе автора могут быть сотни записей.

Я хочу сохранить их вместе, если это возможно, вместо использования ссылок. Так что, в основном, могу ли я получить все книги, не привлекая авторов, используя эту схему?

ответ

3

Вы можете сделать это путем предоставления projection argument к команде find:

db.bookshelves.insert({ 
    "type": "wood", 
    "books": [ 
     { 
      "title": "book 1", 
      "authors": [ 
       {"name": "jim"}, 
       {"name": "bob"} 
       ] 
      }, 
     { 
      "title": "book 2", 
      "authors": [ 
       {"name": "steve"}, 
       {"name": "joe"} 
       ] 
      } 
     ] 
    } 
) 

# Returns the whole document 
db.bookshelves.find({"type": "wood"}) 

# Omits the "author" field of each book: 
db.bookshelves.find({"type": "wood"}, {"books.authors": 0}) 
+0

Большое спасибо, это работает для меня. –

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