我最近在Mongo 2.6 replicaset中看到了这个错误:
library(dplyr)
library(purrr)
map2(df1, df2, `<`) %>%
reduce(`&`) %>%
df1[.,]
# v1 v2 v3 v4
#1 1 2 20 1
#3 3 5 23 1
我假设_id索引默认是唯一的。但我试图检查/设置它。 getIndexes显示没有唯一的选项集。
WARNING: the collection 'mydatabase.somecollection' lacks a unique index on _id. This index is needed for replication to function properly.
我试过> db.somecollection.getIndexes()[0]
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "mydatabase.somecollection",
"name" : "_id_"
}
> db.somecollection.ensureIndex({"_id":1},{unique:true})
> { "numIndexesBefore" : 3, "note" : "all indexes already exist", "ok" : 1 }
> db.somecollection.getIndexes()[0]
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "mydatabase.somecollection",
"name" : "_id_"
}
:
.validate(true)
以及运行无误的...
"valid" : true,
"errors" : [ ],
"ok" : 1
}
。我无法删除_id索引来重新创建它 - 如何将索引设置为唯一或我应该怎样做才能确保RS中的数据一致性?请注意,RS已根据2.2 - >的升级说明进行了升级。 2.4 - &gt; 2.6。我找到了这个MongoDB - Collection lacks a unique index on _id,但没有什么可以解决我的问题。
答案 0 :(得分:2)
过去,在副本集中添加了具有不同兼容性版本的新成员时,我已经看到了这一点。在副本集中的所有节点上运行db.adminCommand({getParameter:1,featureCompatibilityVersion:1}),如果不同,则停止该节点上的复制,更改CompatibilityVersion并准备将其复制到副本。>
答案 1 :(得分:1)
事实证明,当一个新成员被添加到现有副本集时,错误就出现了,并且只显示在该成员上。如果我连接到数据库并尝试添加重复的_id,我会得到通常的E11000 duplicate key error index: ...
,即使getIndexes()
没有表明对索引的唯一约束(假设它是隐式的)。