这里主要是说##$lookuplookup就是使用aggregate的$lookup属性
user表
{ "_id" : 1, "cgNo" : "1","type":"1"}
{ "_id" : 2, "cgNo" : "2", type: "2"}
{ "_id" : 3 "cgNo" : "3" type: "3"}
ordersitem 表
{ "_id" : 1, "cgNo" : "1"
"operTraceDeque" : [ //这个是模拟轨迹表
{
"procDate" : "",
"procStat" : ""
},
{
"procDate" : "",
"procStat" : ""
},
]}
##$lookuplookup作为内嵌试用是比较耗费时间的 我们应该尽力避免使用,数据量比较大的情况下经常会导致查询失败
因本人也是初学 所以以博客的形式记录下最近的使用心得
上面俩张表如果需要查询
ordersitem中operTraceDeque 当查询条件为user表中的type的时候
var parr4 = db.user.distinct("cgNo",{"type":"1"}); 这句的主要作用是查询出自己所有的数据 以及字段 减少$lookuplookup所需要关联的数据
var date = db.ordersitem.aggregate([
{
$match: {
'cgNo':{$in: parr4}, //根据上面筛选后的条件做出查询
}
},
// 数据量比较大的情况还是建议使用下面这俩句话做分页查询的
// { "$skip": 0}, //跳过多少条试用
// { "$limit": 2000}, //查询前多少条数据
{
$lookup: { //关联表 获取另外一张表的数据
from: "user",
localField: "cgNo",
foreignField: "cgNo",
as: "user"
}
},
//因下面date.toArray() 有字数限制 这边建议只取自己需要的数据
{ $project : { //是否显示 1 表示显示字段 0表示不显示
"cgNo":1,
"operTraceDeque" : 1,
}
},
])
print(date.toArray()); //转成数据显示
var parr4 = db.user.distinct("cgNo",{"type":"1"}); 这句的主要作用是查询出自己所有的数据 以及字段 减少$lookuplookup所需要关联的数据
var date = db.ordersitem.aggregate([
{
$match: {
'cgNo':{$in: parr4}, //根据上面筛选后的条件做出查询
}
},
// 数据量比较大的情况还是建议使用下面这俩句话做分页查询的
// { "$skip": 0}, //跳过多少条试用
// { "$limit": 2000}, //查询前多少条数据
{
$lookup: { //关联表 获取另外一张表的数据
from: "user",
localField: "cgNo",
foreignField: "cgNo",
as: "user"
}
},
//因下面date.toArray() 有字数限制 这边建议只取自己需要的数据
{ $project : { //是否显示 1 表示显示字段 0表示不显示
"cgNo":1,
"operTraceDeque" : 1,
}
},
])
print(date.toArray()); //转成数据显示