MongoDB – 如何访问数组中的对象

我无法用文字来形容我的想法,所以这里是一个例子:

[ { 'description': 'fruits', 'examples': [ { 'name': 'Apple', 'color': ['red', 'green'] }, { 'name': 'Banana', 'color': 'yellow' } ] }, { 'description': 'vegetables', 'examples': [ { 'name': 'Tomato', 'color': 'red' }, { 'name': 'Carrot', 'color': 'orange' } ] }, { 'description': 'Wweets', 'examples': [ { 'name': 'Chocolate', 'color': ['brown', 'black', 'white'] }, { 'name': 'Candy', 'color': 'various' } ] } ] 

让我们一步一步来:

如果我想查看所有的食物类别,我使用以下命令查询

 db.food.find() 

我想看看蔬菜

 db.food.find({ 'description': 'vegetables' }) 

现在让我们说,我忘了胡萝卜怎么样(哈哈)。 我该怎么办? 我尝试了以下(本机node.js的MongoDB驱动程序):

 collection.find({'examples.name': 'Carrot'}, function(err, example){ console.log(example) // It still returns me the whole object! }); 

因此,我期望MongoDB返回对象的下一个最高的实例。 比如我想这样做。

 console.log(example.color) // 'orange' 

你有什么主意吗? 我是面向文档的数据库新手:/

当您将一堆对象存储在单个文档中时,您将(默认情况下)取回整个文档。 [*]

当文档的其中一个字段是数组时,如果在数组中find要匹配的项目,则将返回完整数组。

如果你通常只能获得这些东西的一部分,不要因为将所有东西塞进单个文档中的诱惑而陷入困境。

你有一个替代可用:

你可以储藏一些食物,其中每一种食物都有“水果”或“蔬菜”或“…”types的田地。 你仍然可以查询所有的食物,或只是types的“水果”的食物或只是名称“胡萝卜”等食物

数组对于特定对象/文档的属性列表来说是很好的,但是当你将文档塞入到它们中时,它们并不是那么好,那么你就想返回到第一类对象。

有一种方法可以投影并获得只有一部分的字段,但是你仍然会得到整个字段。