初学,不,初用 mongodb,日常的增删改查没啥问题,现在遇到一个比较棘手的问题想来资讯一下大家。
我有两张表,user 表和 article 表。如下图所示👇
如何查询出 article 表中 publish_time 大于 author.mid 与 user 表当中 mid 对应的 user 的 time 的 数据?
上面的说法可能有点绕,分步骤就是我想:
如果可以,最好有上述实现的 mogodb(mongo shell 写法?) 写法和 python(pymongo) 写法。
以及现在瞎写的一些语句,纯小白,轻喷。
1
rbe 2019-05-10 23:28:52 +08:00
没有看懂你想查什么。首先得说明一下字段含义吧,比如 user 表里那个时间是注册时间吗;然后得说清楚你手上有什么数据,希望得到什么数据。mid 和 publish_time 是已知字段吗?需求是“查出某用户注册后发表的文章”?
|
2
HyperSimon OP @rbe 不好意思没有描述清楚,
user: mid -- 用户 id, 8 位数字 time -- 用户手机号码通过验证的时间戳,没有验证手机号码的用户也可以发文章 article: author.mid -- 发帖用户 id publish_time -- 发布帖子的时间戳 上面四条字段除了 time 可能为 0(空)其他都是已知字段,需求是“查询用户在验证手机号码后发布的文章” |
3
brickyang 2019-05-10 23:39:26 +08:00 via iPhone
最简单的做法是查两次,先查一次用户,再查一次文章集合,效率可能比 aggregate 还高。
|
4
HyperSimon OP @brickyang 纯小白,那个是我瞎写的
|
5
rbe 2019-05-10 23:44:34 +08:00
查两次+1,这样比较简单。这类操作没必要写个复杂的 aggregate 吧?
|
6
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;
|
7
acehow 2019-05-11 07:54:57 +08:00 via Android
既然是“查询用户在验证手机号码后发布的文章。那认为你知道用户 id 是个传入参数。根据用户 id 分别查两个表得得到各自的时间,然后扔个数据结构里再比较就好了。
|
8
acehow 2019-05-11 07:59:32 +08:00 via Android
就是先传入用户 id,根据 id 查到他的手机注册时间。然后再去 article 表查晚于这个时间的该用户的文章数。分两步走就可以了。
|
9
HyperSimon OP @acehow 谢谢,用了上面的建议查了两次,您的写法我也去研究下。
|