一旦创建,它们就像常规索引一样。他们坚持getIndexes
只是作为一个提醒,类似于how 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
}
...
}
]
}
那么这意味着,后台索引的创建仍在进行中,您还可以看到有关该过程的一些信息。
例如,您可能会做一些粗略的计算:1000000 中的 368640 需要 1 秒(+1 秒作为可能的偏移量),因此一切都需要 3-6 秒(最终需要 4.8 秒)。
显然,如果您看不到正在进行的此类操作,则说明已经创建了索引。
注意db.currentOp()
:如果您有许多并发操作,那么您可以为, fe指定搜索参数
db.currentOp({"insert.background":1})