使用密钥时

时间:2014-07-24 13:27:04

标签: mongodb

我不确定我是否理解在mongo Db中使用密钥的时间。

在本例中

[
    {
        "v" : 1,
        "key" : {
            "_id" : 1
        },
        "ns" : "test.fubar",
        "name" : "_id_"
    },
    {
        "v" : 1,
        "key" : {
            "a" : 1,
            "b" : 1
        },
        "ns" : "test.fubar",
        "name" : "a_1_b_1"
    },
    {
        "v" : 1,
        "key" : {
            "a" : 1,
            "c" : 1
        },
        "ns" : "test.fubar",
        "name" : "a_1_c_1"
    },
    {
        "v" : 1,
        "key" : {
            "c" : 1
        },
        "ns" : "test.fubar",
        "name" : "c_1"
    },
    {
        "v" : 1,
        "key" : {
            "a" : 1,
            "b" : 1,
            "c" : -1
        },
        "ns" : "test.fubar",
        "name" : "a_1_b_1_c_-1"
    }
]

在此查询

db.fubar.find({'a':{'$lt':10000}, 'b':{'$gt': 5000}}, {'a':1, 'c':1}).sort({'c':-1})

我知道可以使用密钥

  • a_1_b_1 -a_1_c_1
  • C_1
  • a_1_b_1_c_-1

但为什么 - a_1_b_1_c_-1被使用?

    发现中使用的
  • a_1_b_1 投影中使用的
  • a_1_c_1
  • c_1用于排序

我使用a_1_b_1_c_-1的地方?在Find?

1 个答案:

答案 0 :(得分:0)

a_1_b_1_c_-1可用于排序。这种情况是排序子集不是从索引开始处开始的。现在,根据this here,由于排序发生在" c:-1",a_1_b_1_c_-1只能在以下时间出现:

  • sort不从索引开始处开始(这是真的)
  • 查询文档包含索引的所有前面的字段,在本例中为a和b,在相等条件下(也是如此)

因此,在这种情况下可以使用a_1_b_1_c_-1。