如何在 MongoDB 中索引属性对象?

gus*_*olo 5 index mongodb

我有以下示例文档:

{
    "_id" : ObjectId("556e177ca43da29e040041a7"),
    "user_id" : NumberLong(24),
    "request_datetime" : ISODate("2015-06-02T15:52:12.000-05:00"),
    "total_amount" : 102.62,
    "status" : NumberLong(1),
    "adfields" : {
        "27" : "413703562015060200132",
        "28" : "S003POS4",
        "29" : "HAYLEYS",
        "30" : "1"
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是我需要索引“adfields”属性,但它不适用于“多键”索引类型,也不使用“单字段索引”。我尝试使用单个字段索引来索引adfields属性,但是当我查询adfields.27的特定值时,它不使用索引。我无法为adfields.27创建单个字段索引,因为这些数字是动态创建的。

您知道如何执行此操作吗?多谢。

小智 3

改变你的模型后我能够完成这项工作。希望这仍然能满足您的目标用例。为了绕过字段的动态特性,我创建了一个名为“field”的字段和一个名为“value”的字段。这允许我在已知字段上创建多键索引。

db.myColl.insert(
{

"user_id" : NumberLong(24),
"request_datetime" : ISODate("2015-06-02T15:52:12.000-05:00"),
"total_amount" : 102.62,
"status" : NumberLong(1),
"adfields" : [
    {field:"27", value : "413703562015060200132"},
    {field:"28", value: "S003POS4"},
    {field:"29", value: "HAYLEYS"},
    {field:"30", value: "1"}
    ]

})
Run Code Online (Sandbox Code Playgroud)

然后我针对 db.myColl.find({"adfield.field":"30"}) 执行了查找,以获取查询的前图片。我还使用了 db.myColl.explain().find() 来分析它。

然后我通过 db.myColl.createIndex({"adfield.field"1,"adfield.value":1"}) 创建索引。

我执行了上面的查找,果然我看到了 IXScan,并且在explain() 输出中 isMultiKey 为 true。

再次; 希望对模型的改变仍然符合您试图实现的目标的精神。

您可以通过http://docs.mongodb.org/manual/core/index-multikey/阅读有关 mutlikey 的更多详细信息。