Mongo字符串类型的数值查询

​        在Mongo中都知道字符串类型大小比较都是以ASCII进行比较的,所以无法真实比较字符串类型的数值大小

​        比如查询age大于3的:

db.getCollection('ddzinttest').find({"age":{$gt:"3"}})

    得到的结果肯定不是我们所需要的

     那么这种问题该怎么解决呢。Mongo中有一种**$where**查询,这种查询是可以解决这样需求,

db.getCollection('ddzinttest').find({"$where":"this.age>3"})

        可以看到使用**$where**是可以达到这个需求的,那** $where**这东西是什么呢:

  其实 $where查询是将 JavaScript表达式的字符串或函数作为查询的一部分

  Mongo是支持JS语言的,也就是说可以在Mongo中使用JS函数,也就是说其实语句可以这么写

db.getCollection('ddzinttest').find({$where:function(){return this.age>3}})

  而 this.age>3是字符串形式的表达方式

  当然可以利用JS函数写一些更加复杂的查询:例如子文档中字符串的比较查询

1db.getCollection('ddzinttest').find({$where:function(){ 2 for(var i =0;i<this.Child.length;i++){ 3 var currentChild=this.Child[i]; 4 if(currentChild.key==='123'&&currentChild.value>'111'){ 5 return true; 6 } 7 } 8 return false; 9}})

查询子文档数组Child中key等于123并且value大于111的数据

  当然,这种复制的就不能使用字符串表达式了。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java将前端的json数组字符串转换为列表

记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang