node.js - 并且偶尔会在 shell 和 Node native 驱动程序上产生错误的结果

标签 node.js mongodb mongodb-query

我已经构建了一个动态查询生成器来根据许多因素创建我想要的查询,但是,在极少数情况下它会表现得很奇怪。经过一天的阅读日志后,我发现了一种可以简化的情况:

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’})

如果您希望在上述情况下结果为空,则必须在代码中处理这种情况

关于node.js - 并且偶尔会在 shell 和 Node native 驱动程序上产生错误的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67290872/

相关文章:

javascript - 如何在聚合中从数组中删除数据而不干扰 mongodb 中的外部数据

mongodb - mongodb中的多重分组

node.js - 单个 Bootstrap 组件上的较少编译错误

javascript - 在 node.js 中使用 XPath

node.js - 用户与 Mongoose 的完美匹配

javascript - 使用 mongoose 返回特定用户的所有评论,而无需其他文档字段

mongodb - 在 MongoDB 中按时间聚合查询

mongodb - 如何在 AWS DocumentDB 中为组替换 $$ROOT - 功能不受支持 : $$ROOT

javascript - 带 Twig 的模板 Nordemailer

node.js - Node.js 是否优先考虑 I/O 事件而不是 setTimeout()?