一旦創建它們就像常規索引一樣。他們堅持getIndexes
只是提醒,類似於如何unique
,sparse
等。
但它也有其他含義。僅僅因爲前景索引會阻止所有編寫者,在這種情況下,在創建所有索引之前,您將無法執行db.testCollection.getIndexes()
。同時,當您創建背景索引時,則可以撥打db.testCollection.getIndexes()
,您會看到,該索引似乎已經創建。
但在這種情況下,我們無法確定索引是否已實際創建。在這種情況下,你需要調用db.currentOp(),如果你看到這樣
{
"inprog": [
{
"opid": 2001060,
"active": true,
"secs_running": 1,
"op": "insert",
"ns": "test.system.indexes",
"insert": {
"v": 1,
"key": {
"a": 1
},
"ns": "test.testCollection",
"name": "a_1",
"background": 1
},
....
"msg": "bg index build Background Index Build Progress: 368640/1000000 36%",
"progress": {
"done": 368640,
"total": 1000000
}
...
}
]
}
那麼就意味着,背景創建的索引仍在進行中,而且還可以看到關於該過程的一些信息。
例如,你可以做一些粗略的計算: 368640中的1000000需要1秒(+1秒作爲可能的偏移),因此一切都需要3-6秒(最終花費4.8秒)。
很明顯,如果你看不到這樣的操作正在進行,那麼索引已經被創建。
注意:如果你有很多併發操作,那麼你可以爲db.currentOp()
f.e指定searcih參數。
db.currentOp({"insert.background":1})
嗯都unqiue和備用,儘管被創建,因爲這樣做也堅持這樣也過去的創作,所以我不知道我得到的第一行。 – Sammaye 2013-03-24 14:43:52
我只是想說,'稀疏','唯一'只是標識符,如果您調用'db.collection.getIndexes()',您可能會看到這些標識符。 F.E.如果您將索引創建爲'sparse',那麼您會在其描述中看到'{sparse:true}'。 ''background','dropDups'和其他參數的行爲也是一樣的。換句話說,所有在'ensureIndex'中作爲第二個參數傳遞的參數都是索引的描述。 – n1ckolas 2013-03-24 15:28:45
我更新了第一段以反映此評論討論。 – Leopd 2013-03-27 18:15:33