最近在学习node的时候在建表时,发现这个表需要储存另一个表的信息,然后一个表可能会与多个表之间产生联系,这让我很头大,所以便去搜索了一番,结果是我还没学到表之间的关联
以下则是我学到的通过node的mongoose来实现对mongoDb数据库的表的关联
mongoose表的关联查询
使用aggregate
xxx.aggregate([{
$lookup:{
from:
localfiled:
foreignFiled:
as:
}
}],callback)
from表示哪个表与本表关联
localFiled表示依据本表的哪个属性值去用
foreignFiled表示与上面相匹配的值所对应的信息
as表示最终结果储存在该变量里面
如果要与多个表关联,直接写多个lookup
使用populate
首先需要在创建shcema的时候声明哪个是需要关联查询的
并在后面追加ref
例如
我的User表里面会储存cart的id则这样写
cart_id:{
type:Schema.Types.ObjectId,
ref:"Cart",
required:true,
default:""
}
当我们查询时
则使用
User.find({}).populate(cart_id).exec(function(err,suc){
console.log(err);
})
populate里面的参数是该model所关联的信息,例如上面所说的cart_id
这两个方法都可以实现表之间的关联
但是也有不同点
aggregate会在返回数据时额外生成一个变量来储存关联的信息,
populate则是把关联字段直接替换成得到的关联信息