AND偶尔会在shell和节点本机驱动程序上产生错误的结果



我已经构建了一个动态查询生成器,以基于许多因素创建我想要的查询,然而,在极少数情况下,它的行为很奇怪。在阅读日志一天后,我发现了一种可以简化的情况:

db.users.find({att: ‘a’, att: ‘b’})

我所期望的是mongodb默认使用AND,所以上面的查询结果应该是一个空数组。然而,事实并非如此!但是当我显式使用AND时,结果是一个空数组

db.users.find({$and: [{att: 'a'}, {att: ‘b'}]})

在javascript中,对象的键应该是唯一的,否则该值将被最新的值替换(mongodb shell也是基于js的,所以它遵循了js的一些规则(

const t = {att: 'a', att: 'b'};
console.log(t);

因此,在您的情况下,您的查询是这样的:

db.users.find({att: ‘b’})

如果你想在提到的条件中结果为空,你必须在你的代码上处理这种情况

相关内容

最新更新