techfort / LokiJS

javascript embeddable / in-memory database
http:/techfort.github.io/LokiJS
MIT License
6.71k stars 478 forks source link

Wrong result while quering by $in with an index on a large numeric string property #909

Open qiangbro opened 2 years ago

qiangbro commented 2 years ago

my code:

    let t;

    let alarms = [];
    for (let i = 0; i < 10000; i++) {
        alarms.push({id: "74590869096" + (907836 + i), name: 'hello' + i});
    }

    let db = new loki('exampleDB');
    let alarmCollection = db.addCollection('myAlarms', {indices: ['id']});

    console.log(`开始插入。。。`)
    t = Date.now();
    alarms.forEach(obj => alarmCollection.insert(obj));
    console.log(`完成插入 耗时${(Date.now() - t) / 1000}s alarmCollection.count=${alarmCollection.count()}`);

    let exampleId = "74590869096907841";
    console.log('find by id', alarmCollection.count({id: exampleId}))
    console.log('find by $in', alarmCollection.count({id: {$in:[exampleId]}}))
    console.log('find by $keyin', alarmCollection.count({id:{ $keyin: { [exampleId]: 'anything'} }}))

result:

开始插入。。。
完成插入 耗时0.045s alarmCollection.count=10000
find by id 1
find by $in 13
find by $keyin 1

This collcetion has an index on id, which is a large numeric string property. As we can see, while i count/find, $keyin can return correct result, but $in returns Wrong result.

stale[bot] commented 2 years ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.