有时会使用唯一索引插入重复数据

Duplicate data is sometimes inserted with unique index

我在一个集合上确实有一个带有 partialFilterExpression 的唯一索引,但有时会插入重复数据。

创建索引

getCollection().createIndex(new BasicDBObject(userId, 1)
        , new BasicDBObject("name", "uidx-something-user")
                .append("partialFilterExpression", new BasicDBObject(Properties.someting, new BasicDBObject("$eq", true)))
                .append("unique", true));

来自getIndicies命令的索引

{
        "v" : 1,
        "unique" : true,
        "key" : {
                "userId" : 1
        },
        "name" : "uidx-something-user",
        "ns" : "somewhere.something",
        "partialFilterExpression" : {
                "something" : {
                        "$eq" : true
                }
        }
}

重复的文件

{
        "_id" : "08a8506c-bcbc-4ed6-9972-67fd7c37b4bc",
        "userId" : "1068",
        "express" : false,
        "something" : true,
        "items" : [ ],
        "recipient" : {
                "_id" : "efbd8618-c480-4194-964e-f5a821edf695"
        }
}
{
        "_id" : "b6695c6a-f29d-4531-96ac-795f14c72547",
        "userId" : "1068",
        "express" : false,
        "something" : true,
        "items" : [ ],
        "recipient" : {
                "_id" : "4f93fe38-edb2-4cb7-a1b3-c2c51ac8ded1"
}

MongoDb 版本:3.2.7,似乎也发生在 3.2.12

旁注:转储和恢复集合时,抛出 duplicate key error

为什么有时可能会插入重复数据以及如何避免这种情况?

更新

我创建了一个 MongoDb 问题 https://jira.mongodb.org/browse/SERVER-28153

已在 3.2.13、3.4.4、3.5.6 中修复 您可以在 mongodb jira

中阅读更多内容