这篇我们来看mongodb另一个非常有意思的东西,那就是$lookup,我们知道mongodb是一个文档型的数据库,而且它也是最像关系型数据库的一种nosql,但是呢,既然mongodb是无模式的,自然就很难在关系型数据库中非常擅长的多表关联上发挥作用,在这之前,我们可以使用Db ...
这篇我们来看mongodb另一个非常有意思的东西,那就是$lookup,我们知道mongodb是一个文档型的数据库,而且它也是最像关系型数据库的
一种nosql,但是呢,既然mongodb是无模式的,自然就很难在关系型数据库中非常擅长的多表关联上发挥作用,在这之前,我们可以使用DbRef,但
是呢,在mongodb 3.2 中给你增加了一个相当牛逼的手段,那就是$lookup,而且放到了aggreation这种重量级的pipeline分析框架上,自然就是一等
公民了,牛逼哈~。
一:介绍Aggregate
这个aggregate在mongodb中算是一个非常重量级的工具了,而且pipeline的管道模型的理论就是后面操作的数据源来源于上一次操作的结果,这个
应该很好理解吧,好了,下面我们简单看看aggreation中到底有哪几个一等公民。
很简单,就是上面的这十三个,比如说有了所谓的$group操作,我们就可以把这个aggreation做group的处理,有了$sort操作,就可以将结果进行排
序,有了$out操作,我们就可以将结果放到一个collections中去或者inline模式展示。。。
1. $lookup
说了这么多,下面我们简单的来演示一下,比如我们有一个product表,有一个orders表,自然就存在着一个外键关系,下面我们就来造点数据。
db.product.insert({"_id":1,"productname":"商品1","price":15})db.product.insert({"_id":2,"productname":"商品2","price":36})db.orders.insert({"_id":1,"pid":1,"ordername":"订单1"})db.orders.insert({"_id":2,"pid":2,"ordername":"订单2"})db.orders.insert({"_id":3,"pid":2,"ordername":"订单3"})db.orders.insert({"_id":4,"pid":1,"ordername":"订单4"})db.product.find()db.orders.find()
原标题:mongodb 3.x 之实用新功能窥看[2] ——使用$lookup做多表关联处理
关键词:MongoDB
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。