PHP MongoDB查询动态值

时间:2016-01-11 17:02:21

标签: php mongodb php-mongodb

我想查询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))因为我可能有其他动态密钥而不是名称?

提前致谢

1 个答案:

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