在使用mongodb 的过程中,经常会有需求要去关联多表去查询,但mongo 这种非关系型 数据库的使用规则大大的不同于mysql 这种关系型数据库,无法通过简单的sql 语句去完成多表联查,所以需要使用js 的语法去达成需求。
以下是在工作过程中使用到的两个示例:
1、通过联查user_login 与accounts 两张表,实现查询一个手机号两个不同的会员使用的情况: var count=0;
var c1=db.user_login.find({logicalDel:0,primaryPhone:{$exists:true}},{_id:0,id:1,primaryPhone:1});
while(c1.hasNext()){
var c2=c1.next();
var num=db.accounts.find({phone:c2.primaryPhone,id:{$ne:c2.id},logicalDel:0}).count();
if(num >= 1){
count=count+1;
print(c2.primaryPhone);
}
}
print(count)
2、login表里面的数据登录正常,但是profile表里面无相关的数据: var count=0; var c1=db.login.find({loginUpdate:"true",logicalDel:0},{_id:0,id:1}); while(c1.hasNext()){ var c2=c1.next(); var num=db.profile.find({$and:[{userId:c2.id},{logicalDel:0}]}).count() if(num == 0){ count=count+1; print(c2.id); } } print(count)
以上两个示例精简短小,非常易于理解与实践。