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

时间:2012-02-11 07:22:35

标签: node.js 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,以便在运行查询时我提取单个对象而不是整个树?或者也许是编写“查找”查询的更好方法?

2 个答案:

答案 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