zero骑士 2023-11-07 08:47 采纳率: 91.7%
浏览 23
已结题

mongodb模糊查询不返回数据

是这样的,有一批mongodb的数据


([  { "name": "韩梅梅", "age": 30, "city": "上海","phone":135345346},  { "name": "李磊", "age": 25, "city": "北京","phone":1353535346},  { "name": "张三", "age": 40, "city": "成功","phone":17335245346},  ...  { "name": "李四", "age": 32, "city": "杭州","phone":173345346}])

需要通过正则的方式模糊查询出173开头的手机号码的数据
phone的数据类型为double
但是我无论怎么使用正则都返回0条数据
我的代码:

db.myc.find({phone:/^173/})
db.myc.find({phone:{$regex:/^173/}})

这两种写法都只会返回0条数据。我看了网友的做法,大多数都是说先转换成string类型。但是我使用tostring也不太对。
所以想请教一下网友们怎么实现对double类型的正则匹配

  • 写回答

6条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-11-07 09:20
    关注

    引自强大而免费的微信小程序:皆我百晓生

    @zero骑士 对于 MongoDB 3.6.2,您可以使用聚合操作符 $regexFind 来进行正则匹配,而不必依赖 $toString

    下面是使用 $regexFind 的示例代码:

    db.myc.aggregate([
      {
        $match: {
          phone: {
            $regexFind: {
              input: { $concat: ["", "$phone"] },
              regex: "^173"
            }
          }
        }
      }
    ])
    

    在这个示例中,我们使用 $concat 运算符将 phone 字段连接为空字符串,以将其转换为字符串类型。然后,我们使用 $regexFind 运算符进行正则匹配。最后,使用 $match 将匹配的结果过滤出来。

    使用以上代码应该能够匹配到 phone 字段以 173 开头的数据。

    请注意,聚合操作返回的是一个包含匹配结果的文档集合,而不是直接返回匹配的数据。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 11月15日
  • 已采纳回答 11月7日
  • 赞助了问题酬金15元 11月7日
  • 创建了问题 11月7日

悬赏问题

  • ¥300 寻抓云闪付tn组成网页付款链接
  • ¥15 请问Ubuntu要怎么安装chrome呀?
  • ¥15 视频编码 十六进制问题
  • ¥15 Xsheii7我安装这个文件的时候跳出来另一个文件已锁定文件的无一部分进程无法访问。这个该怎么解决
  • ¥15 unity terrain打包后地形错位,跟建筑不在同一个位置,怎么办
  • ¥15 FileNotFoundError 解决方案
  • ¥15 uniapp实现如下图的图表功能
  • ¥15 u-subsection如何修改相邻两个节点样式
  • ¥30 vs2010开发 WFP(windows filtering platform)
  • ¥15 服务端控制goose报文控制块的发布问题