首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  程序员

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

  •  1
     
  •   guxingke · 46 天前 · 1359 次点击
    这是一个创建于 46 天前的主题,其中的信息可能已经有所发展或是发生改变。
    # 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
        1
    gromit1337   46 天前   ♥ 1
    很好奇 mongodb 在市场上使用多吗?
        2
    gz911122   46 天前
    @gromit1337 不算少
    业务中总有些时候适合他
        3
    sadfQED2   46 天前 via Android
    以前我也这么觉得,但是用惯了以后,sql 什么鬼玩意,太难用了
        4
    otakustay   46 天前
    @gromit1337 自从 mongo 吃光了我 32G 内存后我就对这东西有心里阴影了
        5
    guxingke   46 天前
    @otakustay 这个充分利用物理资源, 巴不得把所有东西 load 到内存里 ...
        6
    guxingke   46 天前
    @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 的声明式编程直观多了, 没有那么多没用的 .({ .
        7
    Vegetable   46 天前   ♥ 1
    单纯的 select 操作是 sql 简单,但是涉及到聚合,好像 mongo 的更直观一点,就是啰嗦
        8
    sadfQED2   46 天前 via Android   ♥ 1
    @guxingke 那做某些统计需求,要写上百行 sql 呢
        9
    guxingke   46 天前
    @sadfQED2 这个就无解了, 我主要是快速查一下, 能配合 管道 快速处理一下数据, 根本不写统计需求, group 压根没考虑
    (主要是自己习惯在 shell 下快速验证一下东西, 又没有现成的)

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

    用 sql 是个人倾向, 提高开发效率罢了.
        14
    menyakun   46 天前
    能转成 mongo 的 aggregation 不,我感觉这才是 mongo 用起来爽的
        15
    wellhome   45 天前 via iPhone
    楼主字体是什么
        16
    guxingke   45 天前
    @wellhome Source Code Pro for Powerline
        17
    guxingke   45 天前
    @menyakun 基于 antlr, 做是可以做的, 我个人没有这个需求, 所以没写...
        18
    leon0903   45 天前
    studio 3T 好像就有 sql 写法操作 mongodb 的功能,不过是高级版才有。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2297 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 22ms · UTC 07:14 · PVG 15:14 · LAX 00:14 · JFK 03:14
    ♥ Do have faith in what you're doing.