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

2019-09-03 09:42:50 +08:00
 guxingke
# 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"
"下江"

NOTE

github

2710 次点击
所在节点    程序员
18 条回复
gromit1337
2019-09-03 10:10:00 +08:00
很好奇 mongodb 在市场上使用多吗?
gz911122
2019-09-03 10:13:05 +08:00
@gromit1337 不算少
业务中总有些时候适合他
sadfQED2
2019-09-03 11:01:35 +08:00
以前我也这么觉得,但是用惯了以后,sql 什么鬼玩意,太难用了
otakustay
2019-09-03 12:01:46 +08:00
@gromit1337 自从 mongo 吃光了我 32G 内存后我就对这东西有心里阴影了
guxingke
2019-09-03 12:06:39 +08:00
@otakustay 这个充分利用物理资源, 巴不得把所有东西 load 到内存里 ...
guxingke
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
2019-09-03 12:26:50 +08:00
单纯的 select 操作是 sql 简单,但是涉及到聚合,好像 mongo 的更直观一点,就是啰嗦
sadfQED2
2019-09-03 12:33:23 +08:00
@guxingke 那做某些统计需求,要写上百行 sql 呢
guxingke
2019-09-03 12:38:37 +08:00
@sadfQED2 这个就无解了, 我主要是快速查一下, 能配合 管道 快速处理一下数据, 根本不写统计需求, group 压根没考虑
(主要是自己习惯在 shell 下快速验证一下东西, 又没有现成的)

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

用 sql 是个人倾向, 提高开发效率罢了.
menyakun
2019-09-03 15:03:28 +08:00
能转成 mongo 的 aggregation 不,我感觉这才是 mongo 用起来爽的
wellhome
2019-09-03 15:47:34 +08:00
楼主字体是什么
guxingke
2019-09-03 17:09:54 +08:00
@wellhome Source Code Pro for Powerline
guxingke
2019-09-03 17:10:50 +08:00
@menyakun 基于 antlr, 做是可以做的, 我个人没有这个需求, 所以没写...
leon0903
2019-09-03 17:22:39 +08:00
studio 3T 好像就有 sql 写法操作 mongodb 的功能,不过是高级版才有。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/597407

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX