是否可以在类型为Date或Int的MongoDB字段中进行搜索?

时间:2016-11-18 16:16:33

标签: mongodb

我的应用程序中有一个搜索字段,我希望用户输入搜索字词,然后搜索每个Mongo文档中的各个字段。当然,我可以在String类型的字段(当前使用正则表达式)中搜索数据,但是如何对类型为Date或类型为Int的字段执行此操作?

注意:当我在字段中说搜索时,我的意思是如果用户在搜索字段中键入“16”,它将返回包含“16”的日期,例如2016年1月1日或16/03/2014。整数的原理相同。

3 个答案:

答案 0 :(得分:0)

我认为一种快捷方式是你可以使用$ where 值搜索val =“16”

db.foo.find({$where : "function(){ if(this.dateField.toString().indexOf(val)>= 0 || (""+this.intField).indexOf(val)>=0){return true;}}"})

基本上你可以尝试将字段值转换为字符串,然后在那里搜索它。下行是$ where不使用索引,它基本上扫描集合,当你使用$ where时不能使用其他运算符。

答案 1 :(得分:-1)

是的,这是可能的。

您可以告诉find()仅查看特定数据类型的字段。

$type comes handy.

查看以下链接以获取示例和用法。 https://docs.mongodb.com/manual/reference/operator/query/type/

一个例子是

db.addressBook.find({"field": "search-value"}, { "field" : { $type : "double" } } )

将返回search-value匹配的文档以及该字段的类型为double。

答案 2 :(得分:-1)

因为我有一张图片因此将其作为另一个答案而不是评论发布。

enter image description here

现在,如果您注意到,ID为2和ID 6的文档完全相同。唯一的区别是zipcode字段的数据类型。

我用$运行我的查询,你可以看到,它只带回匹配的记录。如果我摆脱$和$ type条件,它将带回两个记录。

我希望这可以帮助您解决问题。