我刚刚开始使用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,以便在运行查询时我提取单个对象而不是整个树?或者也许是编写“查找”查询的更好方法?
答案 0 :(得分:1)
默认情况下,mongodb find检索所有字段(如sql中的* from
)。您可以通过指定字段名称来提取特定字段
db.data.find({ "children.name": "r1" },'children.name');
答案 1 :(得分:0)
为什么你不期望只返回文件的一部分?除非您告诉它要明确包含或排除哪些字段,否则它将返回整个文档。见http://www.mongodb.org/display/DOCS/Retrieving+a+Subset+of+Fields