mongodb如何查询大于某个字符串数值

当把一个数值类型存成了字符串,如何对该字符串进行数值比较。

先上mongodb中的数据结构:

db.test1.insert({
    "modelId": "111",
    "patientId": "222",
    "patientName": "333",
    "sex": "14",
    "birthday": "2020-08-06",
    "count": "10"
})

现在我们要写一个查询语句,查询出count > 2的SQL,正常我们都会想到 $gt 操作符来编写,那我们现在试一下:

db.test1.find({'count' : {'$gt' : 2}});

在navicat中执行了上面这句sql,发现查询结果为空,什么都没查询出来

其实,这个结果不难猜到,由于数据类型为字符型,当对字段做比较的时候,mongodb会用ASCII进行比较,字符串的ASCII码比较规则为:从首字母开bai始,先比较第一个,再比较第二个,依次比较。字符串“2”的ASCII值比“10”的第一个”1“的ASCII大,查询结果为空。

那我们要怎么才能解决这个问题呢?

1、我们从源头入手,这个问题的关键点就在于用字符串类型存了数值,那只要把字符串类型改为数值类型,这个问题也就解决了,下面我们试一下。

这样就能查出来了,但可能你的业务决定你必须用字符串类型存储数值怎么办?别怕,还有一种解决方案。

2、mongodb提供了一种 $where 的查询方法,用这个查询可以在sql里面编写任意的JavaScript语句,下面试一下。

还是字符串类型存了数值

db.test1.find({'$where' : function () {return this.count > 2}});

执行上面这个SQL,发现有查询结果了,说明这个方法是可行的。

但是要补充一个:这个方法不能与 $elemMatch 共用,而且由于这个查询过程是先将每个文档都要从BSON转换成JavaScript对象,然后通过"$where"表达式来运行。而且"$where"语句不能使用索引,所以只在走投无路时才考虑"$where"这种用法。

所以还是推荐数值就是数值类型来存储,避免不必要的麻烦。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值