2011-11-03 29 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代码我想拥有一个“查找”功能,得到一个标准只适用于在元数据中,所以我需要的东西不是很好,如:

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

the page on dot notation结束时,他们提到的$ elemMatch运营商可以像这样使用:

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

...一个“福”元素与现场相匹配具有值“square”的值的形状以及具有值“purple”的字段颜色。

我不是100%确定这会做你想做的,但检查出来。

相关问题