javascript - 等效于 MongoDB 查询中的 JavaScript 非严格比较

标签 javascript mongodb comparison equality

我相信这个问题之前一定有人问过,但我找不到任何关于这个主题的引用。

我正在使用 URL 查询字符串上提供的数据作为输入,使用 native JavaScript 驱动程序查询 MongoDB 集合,因此它不携带类型信息,只是被视为 String

问题是,我尝试与此输入匹配的数据在集合中可能属于不同类型,例如 Number,但我无法提前预测。据我所知,Mongo 默认比较运算符以严格的语义运行,所以这个查询:

collection.find({ fieldName: value })

等同于这段 JavaScript 代码:

fieldName === value

而我想在这种情况下应用非严格语义 (==),以便 "123" 的值将匹配 "123"123

有谁知道在不影响查询性能的情况下这是否可行?

最佳答案

The problem is, the data I'm trying to match against this input can be of a different type in the collection, for example a Number but I cannot predict this in advance.

如果您不能将您的值规范化为一致的类型,您总是可以使用 $in operator 来寻找替代方案,例如:

db.test.find({ fieldName: { $in: [123, "123"]}})

fieldName 上的索引将包括数字和字符串值。

使用混合类型需要注意的一个警告是,按该字段排序可能不会像您预期的那样工作。数字和字符串有不同的 Lexicographical Order ,例如:

> db.test.find({}, {_id: 0, fieldName:1}).sort({fieldName:1})
{ "fieldName" : 123 }
{ "fieldName" : 456 }
{ "fieldName" : 1233 }
{ "fieldName" : 4566 }
{ "fieldName" : "123" }
{ "fieldName" : "1233" }
{ "fieldName" : "456" }
{ "fieldName" : "4566" }

关于javascript - 等效于 MongoDB 查询中的 JavaScript 非严格比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24853340/

相关文章:

javascript - 如何使用 fullcalendar 在单元格中设置星期几和月份名称

javascript - jQuery无序列表元素点击选择器问题

javascript - 如何在 Mongoose 中验证电子邮件

python - 比较元组列表 - 无论位置如何都相等

oracle - 如何将字符串中的日期与Oracle中的sysdate进行比较?

javascript - NVD3.js 离散条形图

javascript - 素数回归算法无法正常工作

MongoDB 向应用程序发送信号

java - 当 MongoDB DBRef lazyness 设置为 true 时,抛出 java.lang.IllegalArgumentException

.net - 解析 DataSet.Tables 或 Dictionary<string, Tables> 哪个更快