2016-01-11 7 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. check: 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) 
    ); 

 Смежные вопросы

  • Нет связанных вопросов^_^