V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
guxingke
V2EX  ›  程序员

mongo shell 的语法是不是有点反人类? 写了一个 sql -> mongo query 的小工具, 命令行选手可以了解一下.

  •  1
     
  •   guxingke ·
    guxingke · 2019-09-03 09:42:50 +08:00 · 2712 次点击
    这是一个创建于 1942 天前的主题,其中的信息可能已经有所发展或是发生改变。
    # shortcut.
    which mp
    # =>
    mp () {
      mq=`s2m "$*"`
      #echo "__mq: $mq"
      mongo [ip]:[port]/[db] --quiet --eval "$mq.forEach(printjson)"
    }
    
    # base query
    mp "select _id,nickname from user where _id in (100002,100003) order by _id desc limit 10"
    # =>
    { "_id" : NumberLong(100003), "nickname" : "就是辣么帅 2323" }
    { "_id" : NumberLong(100002), "nickname" : "下江" }
    
    # special limit
    mp "select _id,nickname from user where _id in (100002,100003) order by _id desc limit 1,1"
    # =>
    { "_id" : NumberLong(100002), "nickname" : "下江" }
    
    # collaboration with other unix tool
    mp "select _id,nickname from user where _id in (100002,100003) order by _id desc limit 10" | b2j | jq .nickname
    # =>
    "就是辣么帅 2323"
    "下江"
    

    showcase

    NOTE

    github

    18 条回复    2019-09-03 17:22:39 +08:00
    gromit1337
        1
    gromit1337  
       2019-09-03 10:10:00 +08:00   ❤️ 1
    很好奇 mongodb 在市场上使用多吗?
    gz911122
        2
    gz911122  
       2019-09-03 10:13:05 +08:00
    @gromit1337 不算少
    业务中总有些时候适合他
    sadfQED2
        3
    sadfQED2  
       2019-09-03 11:01:35 +08:00 via Android
    以前我也这么觉得,但是用惯了以后,sql 什么鬼玩意,太难用了
    otakustay
        4
    otakustay  
       2019-09-03 12:01:46 +08:00
    @gromit1337 自从 mongo 吃光了我 32G 内存后我就对这东西有心里阴影了
    guxingke
        5
    guxingke  
    OP
       2019-09-03 12:06:39 +08:00
    @otakustay 这个充分利用物理资源, 巴不得把所有东西 load 到内存里 ...
    guxingke
        6
    guxingke  
    OP
       2019-09-03 12:11:18 +08:00
    @sadfQED2 sql 大一统啊, mongo query 有点累.
    > select name,gender from user where id > 100 and id < 10000 order by id desc limit 10.

    > db.user.find({$and: [{"id": {$lt: 100}},{"id": {"$gt":1000}}]}).sort({id:1}).limit(10)

    Sql 的声明式编程直观多了, 没有那么多没用的 .({ .
    Vegetable
        7
    Vegetable  
       2019-09-03 12:26:50 +08:00   ❤️ 1
    单纯的 select 操作是 sql 简单,但是涉及到聚合,好像 mongo 的更直观一点,就是啰嗦
    sadfQED2
        8
    sadfQED2  
       2019-09-03 12:33:23 +08:00 via Android   ❤️ 1
    @guxingke 那做某些统计需求,要写上百行 sql 呢
    guxingke
        9
    guxingke  
    OP
       2019-09-03 12:38:37 +08:00
    @sadfQED2 这个就无解了, 我主要是快速查一下, 能配合 管道 快速处理一下数据, 根本不写统计需求, group 压根没考虑
    (主要是自己习惯在 shell 下快速验证一下东西, 又没有现成的)

    真要做统计需求, 个人也不会在 mongo 这里做的, 一般会用 es .
    guxingke
        10
    guxingke  
    OP
       2019-09-03 12:40:02 +08:00
    @Vegetable 对, 就是啰嗦, 个人主要就是简单查询, 在配合下管道快速处理下数据.
    otakustay
        11
    otakustay  
       2019-09-03 12:45:40 +08:00
    如果用 sql 语句能检索 mongo,那 mongo 就只能是关系型数据,但如果只有关系型数据,为什么要用 mongo
    onion83
        12
    onion83  
       2019-09-03 12:45:43 +08:00   ❤️ 1
    guxingke
        13
    guxingke  
    OP
       2019-09-03 12:54:39 +08:00
    @otakustay 这就是另外一个问题了, 为什么用 mongo , schemaless , 部署运维简单.
    一个普通 3 节点, 基本可以扛到百万用户这个量级. 对于初创应用来讲, 很适合啊.

    用 sql 是个人倾向, 提高开发效率罢了.
    menyakun
        14
    menyakun  
       2019-09-03 15:03:28 +08:00
    能转成 mongo 的 aggregation 不,我感觉这才是 mongo 用起来爽的
    wellhome
        15
    wellhome  
       2019-09-03 15:47:34 +08:00 via iPhone
    楼主字体是什么
    guxingke
        16
    guxingke  
    OP
       2019-09-03 17:09:54 +08:00
    @wellhome Source Code Pro for Powerline
    guxingke
        17
    guxingke  
    OP
       2019-09-03 17:10:50 +08:00
    @menyakun 基于 antlr, 做是可以做的, 我个人没有这个需求, 所以没写...
    leon0903
        18
    leon0903  
       2019-09-03 17:22:39 +08:00
    studio 3T 好像就有 sql 写法操作 mongodb 的功能,不过是高级版才有。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5341 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 09:25 · PVG 17:25 · LAX 01:25 · JFK 04:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.