请教, mongodb 的连表查询

2019-05-10 23:06:32 +08:00
 HyperSimon

初学,不,初用 mongodb,日常的增删改查没啥问题,现在遇到一个比较棘手的问题想来资讯一下大家。

我有两张表,user 表和 article 表。如下图所示👇

如何查询出 article 表中 publish_time 大于 author.mid 与 user 表当中 mid 对应的 user 的 time 的 数据?

上面的说法可能有点绕,分步骤就是我想:

  1. 查询出与 article 对应的 user
  2. 得到对应 user 的 time
  3. 找出 article.publish_time 大于 user.time 的数据。

如果可以,最好有上述实现的 mogodb(mongo shell 写法?) 写法和 python(pymongo) 写法。

以及现在瞎写的一些语句,纯小白,轻喷。

1654 次点击
所在节点    程序员
9 条回复
rbe
2019-05-10 23:28:52 +08:00
没有看懂你想查什么。首先得说明一下字段含义吧,比如 user 表里那个时间是注册时间吗;然后得说清楚你手上有什么数据,希望得到什么数据。mid 和 publish_time 是已知字段吗?需求是“查出某用户注册后发表的文章”?
HyperSimon
2019-05-10 23:33:40 +08:00
@rbe 不好意思没有描述清楚,

user:
mid -- 用户 id, 8 位数字
time -- 用户手机号码通过验证的时间戳,没有验证手机号码的用户也可以发文章

article:
author.mid -- 发帖用户 id
publish_time -- 发布帖子的时间戳

上面四条字段除了 time 可能为 0(空)其他都是已知字段,需求是“查询用户在验证手机号码后发布的文章”
brickyang
2019-05-10 23:39:26 +08:00
最简单的做法是查两次,先查一次用户,再查一次文章集合,效率可能比 aggregate 还高。
HyperSimon
2019-05-10 23:44:01 +08:00
@brickyang 纯小白,那个是我瞎写的
rbe
2019-05-10 23:44:34 +08:00
查两次+1,这样比较简单。这类操作没必要写个复杂的 aggregate 吧?
c4f36e5766583218
2019-05-11 04:00:10 +08:00
select a.* from article a join user u on a.`author.mid`=u.mid where a.publish_time>u.time;
acehow
2019-05-11 07:54:57 +08:00
既然是“查询用户在验证手机号码后发布的文章。那认为你知道用户 id 是个传入参数。根据用户 id 分别查两个表得得到各自的时间,然后扔个数据结构里再比较就好了。
acehow
2019-05-11 07:59:32 +08:00
就是先传入用户 id,根据 id 查到他的手机注册时间。然后再去 article 表查晚于这个时间的该用户的文章数。分两步走就可以了。
HyperSimon
2019-05-11 10:40:21 +08:00
@acehow 谢谢,用了上面的建议查了两次,您的写法我也去研究下。

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

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

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

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

© 2021 V2EX