在MongoDB中返回没有子文档的文档

时间:2013-10-15 19:27:05

标签: mongodb

我有一个复杂的对象,这是一个简化的版本,只是为了展示我想要做的事情......

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

好的,基本上我想做的就是返回没有作者的书籍清单。这不是实际的项目,我只是用它作为一个简单的例子,但我们只是说我想查询所有书籍,或者可能是200本书。在此列表中,我不希望每本书都包含所有作者,作者子文档中可能有数百个条目。

如果可能的话,我想将它们保持在一起,而不是仅使用引用。所以基本上,我可以在没有得到作者的情况下获得所有书籍吗?

1 个答案:

答案 0 :(得分:3)

您可以通过向find命令提供projection argument来执行此操作:

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})