2014-07-24 61 views
0

我不確定我是否理解在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_c_1投影
  • 二手
  • c_1用於排序

我在哪裏使用a_1_b_1_c_-1?在查找?

+0

'c_-1'用於排序而不是'c_1' – Sammaye

+0

哪裏使用c_1?在投影? – Twinsen

+0

c_-1將在排序過程中使用,所以MongoDB正在挑選那個複合索引 – Sammaye

回答

0

a_1_b_1_c_-1可用於排序。排序子集不是從索引開始時就是這種情況。現在,根據this here,因爲排序在「C:-1」情況的發生,a_1_b_1_c_-1只能進來拍照時:

  • 排序不索引處開始啓動(這是真的)
  • 查詢文件包括索引的所有前面的字段,在這種情況下,a和b,在平等條件(這也是真)

因此,a_1_b_1_c_-1可能在這種情況下被使用。

相關問題