2013-09-10 59 views
2

平臺:的MongoDB,春,SpringDataMongoDB內的Hashmap Mongo的查詢與未知的哈希鍵

我有一個名爲 「邂逅」 集合下面結構

遭遇:

{ "_id" : "49a0515b-e020-4e0d-aa6c-6f96bb867288", 
    "_class" : "com.keype.hawk.health.emr.api.transaction.model.Encounter", 
    "encounterTypeId" : "c4f657f0-015d-4b02-a216-f3beba2c64be", 
    "visitId" : "8b4c48c6-d969-4926-8b8f-05d2f58491ae", 
    "status" : "ACTIVE", 
    "form" : 
    { 
     "_id" : "be3cddc5-4cec-4ce5-8592-72f1d7a0f093", 
     "formCode" : "CBC", 
     "fields" : { 
      "dc" : { 
       "label" : "DC", 
       "name" : "tc", 
      }, 
      "tc" : { 
       "label" : "TC", 
       "name" : "tc", 


      }, 
      "notes" : { 
       "label" : "Notes", 
       "name" : "notes", 
      } 
     }, 
     "notes" : "Blood Test", 
     "dateCreated" : NumberLong("1376916746564"), 
     "dateModified" : NumberLong("1376916746564"), 
     "staffCreated" : 10013, 
     "staffModified" : 10013 

    }, 
} 

元素

protected LinkedHashMap<String, Field> fields; 
: 「 fields」 是使用一個Java哈希映射爲代表

的關鍵的散列映射()是不固定的,但在運行時生成的。

如何查詢獲取集合,其中「標籤」 =「TC」中的所有文件?

這不是可以查詢像db.encounter.find({'form.fields.dc.label':'TC'}),因爲該元素的名稱「DC」不知道。我想跳過現在的位置和執行查詢,像:

db.encounter.find({'form.fields.*.label':'TC'}); 

任何想法?

此外,如何做這種情況下我最好使用索引?

+1

很遺憾,您的架構是在這裏,因爲沒有簡單的方法做的缺點,你需要做'fields'對象的數組 – Sammaye

+0

感謝。我得到它並朝着你所建議的方向前進。 –

回答

2

如果fields是一個數組和子文件的關鍵部分,而不是:

"fields" : [ 
    { "key" : "dc", 
    "label" : "DC", 
    "name" : "dc" 
    }, 
    { "key" : "tc", 
    "label" : "TC", 
    "name" : "tc" 
    } 
] 

在這種情況下,你可以簡單地查詢該陣列內部的任何子元素:

db.coll.find({"form.fields.label":"TC"}) 

不知道你會如何與Spring集成,但也許這個想法有幫助嗎?就索引而言,您可以索引到數組中,從而爲您提供多鍵索引。基本上,索引將有一個單獨的條目指向每個數組值的文檔。

+0

它確實有幫助。謝謝。 –