Mongodb - 在PHP中查找嵌入式数组

时间:2012-02-01 20:09:12

标签: php arrays mongodb

我有一个名为Forms的集合:在该集合中,我有一个名为Form_Fields的子集合。所以文档可能如下所示:

}
   "_id": ObjectId("4f2984b1af06e80418000000"),
   "Form_Name": "Users",
   "Form_Fields": [
                  {"Field_Name": "First_Name"},
                  {"Field_Name": "Last_Name"}
                  ]
}

那么如何找到表单字段的数组呢?

我试过了:

$collection->find(array("Form_Name"=>"Users");

但确实会返回数组

First_Name, Last_Name

我想要完成的是执行一个查找,它将使用Form_Name = Users找到文档,然后返回一个包含所有Form_Fields的数组。

我知道这不对,但是:

find(array("Form_Name=>"Users"(array(Form_Fields)))

它只返回2个Field_Names的数组?

有人可以帮我构建“查找”以查找数组中的“用户”表单元素。所以我想在文档中找到所有'Form_Fields'和'Form_Name'='Users'文档。< / p>

谢谢。

更新

我想搜索具有特定父文档属性的嵌入式文档。所以,假设我有一个集合“Forms”并嵌入到该集合中,我有一个名为“Form_Fields”的文档。这样每个表单都有嵌入/相关字段。我想找到具有属性“Form_Name”的文档的所有嵌入表单字段:“Users”。

我应该执行嵌入式搜索,例如:

$ cursor = $ collection-&gt; find(array(“Form_Name”=&gt;“Users”));

//这会带回form_name = users的文档。 //我应该使用以下内容扩展搜索:

$ cursor - &gt; find(“搜索以查找所有嵌入的Form_Fields”)

...

1 个答案:

答案 0 :(得分:1)

您可以指定要获取的文档中的哪个字段。这是你在javascript中的例子。

db.collection.find({"Form_Name": "Users"}, {"Form_Fields": 1});

这将返回包含两个字段_idForm_Fields的文档(或多个)。如果您不想要_id,则必须明确排除它。

db.collection.find({"Form_Name": "Users"}, {"Form_Fields": 1, "_id": -1});