0

我想查询里面的内容(文本)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))

提前致谢

4

1 回答 1

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)
    );
于 2016-01-13T11:04:31.927 回答