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

请教, mongodb 的连表查询

  •  1
     
  •   HyperSimon 2019-05-10 23:06:32 +08:00 2170 次点击
    这是一个创建于 2357 天前的主题,其中的信息可能已经有所发展或是发生改变。

    初学,不,初用 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) 写法。

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

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

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

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

    上面四条字段除了 time 可能为 0(空)其他都是已知字段,需求是“查询用户在验证手机号码后发布的文章”
    brickyang
        3
    brickyang  
       2019-05-10 23:39:26 +08:00 via iPhone
    最简单的做法是查两次,先查一次用户,再查一次文章集合,效率可能比 aggregate 还高。
    HyperSimon
        4
    HyperSimon  
    OP
       2019-05-10 23:44:01 +08:00
    @brickyang 纯小白,那个是我瞎写的
    rbe
        5
    rbe  
       2019-05-10 23:44:34 +08:00
    查两次+1,这样比较简单。这类操作没必要写个复杂的 aggregate 吧?
    c4f36e5766583218
        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;
    acehow
        7
    acehow  
       2019-05-11 07:54:57 +08:00 via Android
    既然是“查询用户在验证手机号码后发布的文章。那认为你知道用户 id 是个传入参数。根据用户 id 分别查两个表得得到各自的时间,然后扔个数据结构里再比较就好了。
    acehow
        8
    acehow  
       2019-05-11 07:59:32 +08:00 via Android
    就是先传入用户 id,根据 id 查到他的手机注册时间。然后再去 article 表查晚于这个时间的该用户的文章数。分两步走就可以了。
    HyperSimon
        9
    HyperSimon  
    OP
       2019-05-11 10:40:21 +08:00
    @acehow 谢谢,用了上面的建议查了两次,您的写法我也去研究下。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5504 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 86ms UTC 01:27 PVG 09:27 LAX 18:27 JFK 21:27
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86