我有一个mongoDB集合,其中包含可通过多种识别方案识别的项目
{
"identification" : {
"SCHEME1" : [ "9181983" ],
"SCHEME2" : [ "ABC" , "CDE" ],
"SCHEME4" : ["FDE"]
}
}
{
"identification" : {
"SCHEME2" : [ "LALALAL" ],
"SCHEME5" : [ "CH98790789879" ]
}
},
项目很可能没有所有识别方案,有些(如上例所示)1-2-4其他可能有不同的识别方案。识别方案的数量最终没有定义并且会增长。每个身份证明只能存在一次。
我想执行两个不同的查询:
使用方案和标识查找项目,例如
db.item.find({"identification.SCHEME2": "CDE"})
使用特定识别方案搜索所有项目,例如
db.item.find({"identification.SCHEME2": {$exists: true}})
我的方法是创建稀疏索引:
db.item.createIndex( { identification.SCHEME1: 1 }, { sparse: true, unique: true} );
db.item.createIndex( { identification.SCHEME2: 1 }, { sparse: true, unique: true } );
db.item.createIndex( { identification.SCHEME3: 1 }, { sparse: true, unique: true } );
and so on ....
这种方法很有效,直到我发现mongoDB中有a limit of 64 indexes on one collection。
有谁知道我如何用一个索引索引整个字段“识别”?或者我的文档结构错了?欢迎任何想法,谢谢。
答案 0 :(得分:1)
我在报告数据库中遇到了同样的问题,该数据库具有我想在find子句中使用的维度。解决方案是使用固定字段将数据保存为k / v对并对其进行索引。 在你的情况下:
{
"identification" : [
{"k":"SCHEME1", "v":[ "9181983" ]},
{"k":"SCHEME2", "v":[ "ABC" , "CDE" ]},
{"k":"SCHEME4", "v":["FDE"]}
]
}
如果现在创建一个超过{"identification.k":1, "identification.v":1}
的复合索引,则可以使用索引搜索它:
db.item.find({"identification.k":"SCHEME2", "identification.v":"CDE"})
下行是您需要更新架构......