2011-11-03 4 views
2

나는 다음과 같은 문서가 있습니다점 표기법 이외의 다른 방법이 있습니까?

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

을하지만 내 문서와 일치하지 않는 (즉, 같은 somtehing 기타의 원인을 갖고 싶어 메타 데이터 키) : 배경으로

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

, 내 PHP 코드에서 내가이 기준은 메타 데이터에 적용 가져옵니다 "찾기"기능을 갖고 싶어하고 그래서 뭔가가 필요 그리 좋은 같은 :

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

이 ... 필드와 "foo는"요소에 맞게 : 그들이 그렇게처럼 사용할 수 있습니다 $ elemMatch 연산자를 언급 the page on dot notation의 끝으로

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

당신이 명확하게 할 수 있습니까? 두 번째 쿼리에서 원하는 것은 무엇입니까? { "type": "instrument", "key": 5}가 필드 metadata.links의 유일한 객체 인 레코드를 찾으십니까? – chim

답변

0

모양이 "정사각형"이고 필드 색이 "자주색"인 모양입니다.

나는 이것이 당신이 원하는대로 할 것이라고 100 % 확신하지는 않지만 그것을 확인하십시오.

관련 문제