4

平台: MongoDB、Spring、SpringDataMongoDB

我有一个名为“Encounter”的集合,结构如下

遇到:

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

    }, 
}

元素 " fields" 使用 Java Hashmap 表示为:

protected LinkedHashMap<String, Field> fields;

hashmap() 的 Key 不是固定的,而是在运行时生成的。

如何查询以获取集合中“label”=“TC”的所有文档?

db.encounter.find({'form.fields.dc.label':'TC'})由于元素名称“dc”未知,因此无法进行查询。我想跳过那个位置和执行查询,比如:

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

有任何想法吗?

另外,在这种情况下如何最好地使用索引?

4

1 回答 1

4

如果fields是一个数组,而您的键是子文档的一部分:

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

在这种情况下,您可以简单地查询数组中的任何子元素:

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

不确定如何将它与 Spring 集成,但也许这个想法有帮助?就索引而言,您可以对数组进行索引,从而为您提供多键索引。基本上,索引将有一个单独的条目指向每个数组值的文档。

于 2013-09-10T21:43:08.857 回答