2016-01-11 63 views
0

我想查詢我的dynamic values keys內的內容(文本),但我不知道最簡單的方法來做到這一點。PHP的MongoDB查詢動態值

所以我蒙戈集合是這樣的:

{ 
    "_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

如果你有一些其他的動態密鑰那麼你可以使用$和mongodb。檢查:https://docs.mongodb.org/manual/reference/operator/query/and/ – Monty

+0

@Monty問題是,我不知道密鑰名稱,除非我迭代所有集合獲取所有可用的密鑰,然後構建查詢,但我擔心性能 – psychok7

+1

在這種情況下,你可能會轉移到一個結構,您可以查詢關鍵名稱 – Sammaye

回答

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