Mongo字符串类型的数值查询---$Where查询介绍

?        在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函数写一些更加复杂的查询:例如子文档中字符串的比较查询

db.getCollection(‘ddzinttest‘).find({$where:function(){
    for(var i =0;i<this.Child.length;i++){
        var currentChild=this.Child[i];
        if(currentChild.key===‘123‘&&currentChild.value>‘111‘){
            return true;
        }
    }
    return false;
}})            

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

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

原文地址:https://www.cnblogs.com/yan7/p/9371205.html

时间: 2024-08-01 19:46:32

Mongo字符串类型的数值查询---$Where查询介绍的相关文章

PHP中字符串类型与数值类型混合计算

字符串转数值的规则 当一个字符串被当作一个数值来取值,其结果和类型如下: 如果该字符串没有包含 '.','e' 或 'E' 并且其数字值在整型的范围之内(由 PHP_INT_MAX 所定义),该字符串将被当成 integer 来取值.其它所有情况下都被作为 float 来取值. 该字符串的开始部分决定了它的值.如果该字符串以合法的数值开始,则使用该数值.否则其值为 0(零).合法数值由可选的正负号,后面跟着一个或多个数字(可能有小数点),再跟着可选的指数部分.指数部分由 'e' 或 'E' 后面

mysql按照字符串类型的数值按数值进行排序

很明显,我写的sql是希望按照这三个字段进行升序排列,查看之后发现scene_no是varchar类型,第一次遇到这个问题我很不解,就算是字符串类型为什么要分开排序呢?这样不就等于把“10”分成“1”.“0”进行排序的吗,wtk!?这么神奇吗?百度了一下字符串类型是如何进行排序的,看了一些答案自己尝试了一下果然OK! 因为mysql进行的排序规则是按照ASCII码进行排序的,并不会自动的识别出这些数据是数值,sql改为 order by 字段名称+0 desc/asc的形式进行排序 即可.这样m

sql server将字符串类型转换为数值类型

在SQL Server中,将字符串的值转换为数值类型的值可以有三种方法. 1.使用cast()方法. select cast('6.0' as decimal(6, 2)); -- 6.00 2.使用convert()方法. select convert(decimal(6, 2), '100'); -- 100.00 3.使用与数值0相加的方法. select '233' + 0; -- 233 以上三种方法在转换类型的时候都要格外注意被转换类型的值,因为可能会出现各种强制转换失败的问题,比如

Lucene 学习之二:数值类型的索引和范围查询分析

Lucene   使用的是字符(词)类型的索引结构.对数值类型的索引和存储最终都要先转成字符类型. 早期版本Lucene 没有封装数值类型的公共类.需要先直接将数字转成字符串再加到Field 中. JAVA代码: 1 Document doc = new Document(); 2 long i = 123456L; 3 doc.Add(new Field("id", String.valueOf(i), Field.Store.YES, Field.Index.YES)); 4 wr

Oracle数据库里面查询字符串类型的字段不为空和为空的SQL语句:

一:查询字符串类型的字段的值不为空的SQL: [sql] view plaincopy select * from TB_CMS_FLGTINFO_A t where (t.fsta is not null and t.fsta <>' '); 主:上面的TB_CMS_FLGTINFO_A是表名,fsta是表中的字段 二:查询字符串类型的字段的值为空的SQL: [sql] view plaincopy select * from TB_CMS_FLGTINFO_A t where (t.fst

SpringMVC中的返回值问题之二返回数值类型和字符串类型

返回数值类型和字符串类型 需要导入依赖 当引入Jackson-databind-2.5.1.jar时自动引入Jackson-annotations-2.5.0.jar <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core --><dependency> <groupId>com.fasterxml.jackson.core</groupId> <a

第四章 数值和字符串类型

@数值和字符串 python的数据类型体现在数据上,数据是什么类型,他就是什么类型. 数值 数值分为整数(int),浮点数(float)以及decimal和fraction 变量引用: 表达式,有加减乘除. 可以用占位符传递数据:(浮点型显示并保留两位小数) 用于比较: 在数值中,我们有一个内置的math函数可以直接导入引用. math.floor() 在横坐标中往左移: math.ceil() 在横坐标中往右移 math.trunc() 在横左边中往0移 round()四舍五入法. 数值可以转

数值与字符串类型

Python3 中有六个标准的数据类型:Number(数字).String(字符串).List(列表).Tuple(元组).Sets(集合).Dictionary(字典). 不可变数据(四个):Number(数字).String(字符串).Tuple(元组).Sets(集合): 可变数据(两个):List(列表).Dictionary(字典). 一.数字类型 数字类型包括:int(整型).float(浮点数).complex(复数).bool(布尔值). 注:python2中还有一个长整型,py

Oracle中的字符串类型及相关函数详解

1.概述 本文介绍String类型及相关的函数,基于当前最新的Oracle 12c 为基础作介绍. 下文将字符串简称为串. Oracle函数的工作方式有两种: 1.根据旧的对象创建新的对象--他们对原来的信息进行修改,如改变字母的大小写. 2.告诉用户有关的信息,如一个单词或句子中有几个字符. 后续会更新另外两种处理文本的方式:Oracle中的正则表达式 和 Oracle Text工具,等文章编辑完成,会在此处添加链接. Oracle中主要有两种字符串类型:CHAR和VARCHAR2,他们以字母