我已经构建了一个动态查询生成器,以基于许多因素创建我想要的查询,然而,在极少数情况下,它的行为很奇怪。在阅读日志一天后,我发现了一种可以简化的情况:
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’})
如果你想在提到的条件中结果为空,你必须在你的代码上处理这种情况