将对象添加到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
答
默认情况下,mongodb find检索所有字段(如sql中的* from
)。您可以通过指定字段名称 来提取特定字段。
db.data.find({ "children.name": "r1" },'children.name');
主要是由于JSON/BSON对象的工作方式,尤其是在数组中。如果有人说“为给定的博客文章找到一个特定的评论”,那么返回博客文章+所有其他评论并没有意义,而只是评论对象。我在MongoDB文档网站上发现了一个资源,它提到了构建树的不同方式,但还没有找到任何有用的东西来继续。 – 2012-02-11 11:09:45
使用我列出的链接中的功能获取所需的字段。还有更多的情况下,您希望比返回的一个找到的字段多,而不是只有一小部分文档返回以响应搜索。 – 2012-02-11 16:33:01