我有一个名为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”)
...
答案 0 :(得分:1)
您可以指定要获取的文档中的哪个字段。这是你在javascript中的例子。
db.collection.find({"Form_Name": "Users"}, {"Form_Fields": 1});
这将返回包含两个字段_id
和Form_Fields
的文档(或多个)。如果您不想要_id
,则必须明确排除它。
db.collection.find({"Form_Name": "Users"}, {"Form_Fields": 1, "_id": -1});