我想查询dynamic values keys
内的内容(文字),但我无法找出最简单的方法。
所以我的mongo系列是这样的:
{
"_id" : ObjectId("566aecb8f0e46491068b456c"),
"metadatas" : [
{
"schema_id" : "f645fabef0e464e51e8b4567",
"values" : {
"name" : "Test",
"age" : NumberLong(29),
"address" : "Test1"
},
"updated_on" : ISODate("2015-12-11T00:00:00Z")
},
{
"schema_id" : "d745fabef0e464e51e8b4567",
"values" : {
"something_else" : "lipsum"
},
"updated_on" : ISODate("2016-12-11T00:00:00Z")
}
],
}
我如何动态查询values
内的内容,因为我无法执行$db->collec->find(array('metadatas.values.name' => $regex))
因为我可能有其他动态密钥而不是名称?
提前致谢
答案 0 :(得分:1)
我最终将我的密钥唯一地保存在另一个集合上,然后构建查询并连接它,然后根据@Sammaye的想法进行应用:
$regex = new \MongoRegex("/^$query/i");
# First get all the dynamic keys you need to filter
$keys_to_search = $this->db->metadata_keys->find();
$this->log($keys_to_search);
$query_builder = array('$or'=>array());
foreach ($keys_to_search as $value){
array_push(
$query_builder['$or'],
array('metadatas.values.' . $value['key'] => $regex)
);
}
$this->log($query_builder);
$search_metadata_name = $this->db->filesfolders->find(
$query_builder, array('sql_fileid' => true)
);