Есть ли другой способ, кроме точечной записи? - PullRequest
2 голосов
/ 03 ноября 2011

У меня есть следующий документ:

{
   "_id":ObjectId("4eb28bd60078621a7d0000aa"),
   "metadata":{
      "xuuid":{
         "scope":"g",
         "version":1,
         "uuid":"0c1969c55b0241bfa3d37c6ceb900bba"
      },
      "custom":[

      ],
      "file":{
         "staticDataProviderId":4,
         "contentType":"factsheet",
         "name":"hugos tagebuch",
         "size":2345,
         "source":"bamldocuments",
         "mimeType":"application/pdf",
         "created":1319623020,
         "modified":1319623020,
         "accessed":1349623020,
         "locales":[
            "EN_us",
            "CH_fr"
         ],
         "countries":[
            "CH"
         ],
         "status":"published"
      },
      "links":[
         {
            "type":"instrument",
            "key":5
         },
         {
            "type":"instrument",
            "key":3
         }
      ]
   },
   "chunkSize":262144,
   "length":14,
   "md5":"2dd900d9be40e2dd3fc69cc77c14726c"
}

Я могу найти его по следующему запросу:

db.fs.files.find({"metadata.links":{"type":"instrument","key":5}})

Но я хочу что-то подобное (не соответствует моему документу, причина других ключей в метаданных):

db.fs.files.find({"metadata"{"links":{"type":"instrument","key":5}}})

В качестве фона, в моем PHP-коде я хочу иметь функцию "найти", которая получает критерии, применяемые только в метаданных, и поэтому мне нужно что-то не очень приятное, например:

public function find(array $criteria)
{
   $extendedCriteria = array();
   foreach($criteria as $key => $value) {
      $extendedCriteria['metadata.'.$key => $value]; 
   }
   ...
}

1 Ответ

0 голосов
/ 28 января 2012

В конце страницы в точечной нотации упоминается оператор $ elemMatch, который можно использовать так:

db.foo.find({foo: {"$elemMatch": {shape: "square", color: "purple"}}})

... для соответствия элементу "foo"с формой поля со значением «квадрат» и цветом поля со значением «фиолетовый».

Я не уверен на 100%, что это будет делать, что вы хотите, но проверьте это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...