gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 10:31:27 26 4
gpt4 key购买 nike

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

我们的数据集是这样的:

// This is a simplified harness to replicate what we're seeing in our DB
/** number_user_id indexes **/
db.getCollection("number_user_id").ensureIndex({
"_id": NumberInt(1)
},[]);

/** number_user_id indexes **/
db.getCollection("number_user_id").ensureIndex({
"user_id": NumberLong(1)
},[]);

/** number_user_id indexes **/
db.getCollection("number_user_id").ensureIndex({
"number": NumberLong(1)
},[]);

/** number_user_id indexes **/
db.getCollection("number_user_id").ensureIndex({
"user_id": NumberLong(1),
"number": NumberLong(1)
},{
"unique": true
});

/** number_user_id records **/
db.getCollection("number_user_id").insert({
"_id": ObjectId("537dc86a80f1cf0e42d63af1"),
"number": null,
"user_id": 1
});
db.getCollection("number_user_id").insert({
"_id": ObjectId("537dc87f80f1cf0f42d63af1"),
"number": 2,
"user_id": 1
});
db.getCollection("number_user_id").insert({
"_id": ObjectId("537dc87580f1cf0d42d63af1"),
"number": 1,
"user_id": 1
});

查询区别如下:

db.number_user_id.find({ $or: [{ number: null }, { number: { $lte: 2 } }] });
// On 2.4 you get all 3 documents back on 2.6 you get 1 document back

db.number_user_id.find({ $or: [{ number: null }, { number: { $lte: 2 } }] }).count();
// On 2.4 you get 3 on 2.6 you get 1

如果我删除联合索引,我可以获得正确的结果,但这会损害数据的完整性。

我在文档/更新日志中找不到这个场景。所以我想知道我是否需要做不同的索引、重写查询或者我是否发现了 MongoDB 错误。

最佳答案

这是一个已确认的错误 https://jira.mongodb.org/browse/SERVER-14030

由于将在 MongoDB 2.6.2 中修复 https://jira.mongodb.org/browse/SERVER-13960

关于自从 2.4 升级到 2.6 后,MongoDB 索引查询返回不正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23805916/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com