我相信这个问题之前一定有人问过,但我找不到任何关于这个主题的引用。
我正在使用 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/