MongoDB索引查询在从2.4升级到2.6后返回不正确的值

MongoDB索引查询在从2.4升级到2.6后返回不正确的值,mongodb,Mongodb,从2.4升级到2.6后,我发现索引导致一些查询产生不正确的值。 我们的数据集如下所示: //这是一个简化的工具,用于复制我们在数据库中看到的内容 /**用户id索引的数量**/ db.getCollection(“数字用户id”).ensureIndex({ “_id”:数字打印(1) },[]); /**用户id索引的数量**/ db.getCollection(“数字用户id”).ensureIndex({ “用户id”:数字长(1) },[]); /**用户id索引的数量**/ db.g

从2.4升级到2.6后,我发现索引导致一些查询产生不正确的值。

我们的数据集如下所示:

//这是一个简化的工具,用于复制我们在数据库中看到的内容
/**用户id索引的数量**/
db.getCollection(“数字用户id”).ensureIndex({
“_id”:数字打印(1)
},[]);
/**用户id索引的数量**/
db.getCollection(“数字用户id”).ensureIndex({
“用户id”:数字长(1)
},[]);
/**用户id索引的数量**/
db.getCollection(“数字用户id”).ensureIndex({
“数字”:数字长(1)
},[]);
/**用户id索引的数量**/
db.getCollection(“数字用户id”).ensureIndex({
“用户id”:数字长(1),
“数字”:数字长(1)
},{
“独特”:真实
});
/**用户id记录的数量**/
db.getCollection(“数字用户id”)。插入({
“_id”:ObjectId(“537dc86a80f1cf0e42d63af1”),
“数字”:空,
“用户id”:1
});
db.getCollection(“数字用户id”)。插入({
“_id”:ObjectId(“537dc87f80f1cf0f42d63af1”),
“数字”:2,
“用户id”:1
});
db.getCollection(“数字用户id”)。插入({
“_id”:ObjectId(“537dc87580f1cf0d42d63af1”),
“数字”:1,
“用户id”:1
});
查询差异如下:

db.number\u user\u id.find({$or:[{number:null},{number:{$lte:2}]});
//在2.4中,您将获得所有3个文档;在2.6中,您将获得1个文档
db.number_user_id.find({$or:[{number:null},{number:{$lte:2}}]}).count();
//在2.4你得到3在2.6你得到1
如果删除联合索引,我可以得到正确的结果,但这会压缩数据完整性

我在文档/变更日志中找不到此场景。所以我想知道我是否需要执行不同的索引、重写查询,或者是否发现了MongoDB bug。

这是一个已确认的bug


由于将在MongoDB 2.6.2中修复,我觉得这是一个bug。这是一个非常奇怪的行为。我注意到,如果您在“number”索引上创建一个稀疏索引,那么查询将按预期工作。谢谢,这已被确认为一个bug。