将对象添加到MongoDB中的深度数组中

问题描述:

我刚刚开始使用MongoDB构建一个小应用程序,似乎无法找到任何示例,我可以将对象添加到深度数组中,然后可以单独查找这些数组。将对象添加到MongoDB中的深度数组中

让我通过以下一组步骤以及我编写的代码进行说明。

我在MongoDB中创建一个简单的对象,像这样:

testing = { name: "s1", children: [] }; 
db.data.save(testing); 

当我询问这一切看起来不错,单纯的静止:

db.data.find(); 

,输出:

{ 
    "_id" : ObjectId("4f36121082b4c129cfce3901"), 
    "name" : "s1", 
    "children" : [ ] 
} 

然而,在我通过“推入”一个对象来更新“children”数组后,我进入了各种问题

首先,我运行更新命令:

db.data.update({ name:"s1" },{ 
    $push: { 
    children: { name:"r1" } 
    } 
}); 

然后,当我查询数据库:

db.data.find({ 
    children: { name: "r1" } 
}); 

结果:

{ 
    "_id" : ObjectId("4f36121082b4c129cfce3901"), 
    "children" : [ { "name" : "r1" } ], 
    "name" : "s1" 
} 

不使任何意义对我来说,因为我会有预计以下内容:

{ 
    "name": "r1" 
} 

有没有更好的将数据插入到MongoDB的方法,这样当我运行查询时,我会提取单个对象而不是整个树?或者可能是编写“查找”查询的更好方法?

为什么你会希望ot只返回文档的一部分?它会返回整个文档,除非您告诉它哪些字段要明确包含或排除。请参阅http://www.mongodb.org/display/DOCS/Retrieving+a+Subset+of+Fields

+0

主要是由于JSON/BSON对象的工作方式,尤其是在数组中。如果有人说“为给定的博客文章找到一个特定的评论”,那么返回博客文章+所有其他评论并没有意义,而只是评论对象。我在MongoDB文档网站上发现了一个资源,它提到了构建树的不同方式,但还没有找到任何有用的东西来继续。 – 2012-02-11 11:09:45

+0

使用我列出的链接中的功能获取所需的字段。还有更多的情况下,您希望比返回的一个找到的字段多,而不是只有一小部分文档返回以响应搜索。 – 2012-02-11 16:33:01

默认情况下,mongodb find检索所有字段(如sql中的* from)。您可以通过指定字段名称 来提取特定字段。

db.data.find({ "children.name": "r1" },'children.name');