有两个集合,第一个集合称为firstcollection,其中包含诸如
这样的元素 { uid:12345, pid:777, comment="first" }
和其他被称为secondcollection的元素,例如
{ uid:12345, extra:17 }
我如何能够通过uid获得连接两个集合的输出,而同时又满足两个集合中的条件(例如,注释字段存在于firstcollection上,而多余的字段是在secondcollection上高于15。
现在这是我尝试过的:
var x = db.firstcollection.find({comment:{$exists:true}})
db.secondcollection.aggregate({
$lookup:
{
from: "x",
localField: "uid",
foreignField: "uid",
as: "aggregation"
}
})
但是我完全不确定我是否走对了路,也不知道如何查询secondcollection,因此它可以满足我之前提到的条件。
答案 0 :(得分:0)
@wazowski ....它将帮助您在db.post.aggregate([{{“ $ match”:{{“ rating”:“ important”}}},{{“ $ sort”:{{“ date” :-1)},{“ $ limit”:20},{{$ lookup“:{\” localField“:” user_id“,” from“:” user“,” foreignField“:” _ id“,” as“: “ userinfo”}},{{$ unwind“:” $ userinfo“},{” $ project“:{\” text“:1,” date“:1,” userinfo.name“:1,” userinfo.country“ :1。}}])
如果您是初学者,那么为您提供明确的解释...
db.users.aggregate([//与user_info表连接 {$ lookup:{from:“ userinfo”,//其他表名localField:“ userId”,//用户表字段名foreignField:“ userId”,//用户信息表字段名as:“ user_info” //别名用于userinfo表}},{$ unwind:“ $ user_info”},// $ unwind用于获取对象中的数据或仅用于一条记录// //与user_role表{$ lookup:{from:“ userrole”,localField: “ userId”,foreignField:“ userId”,如:“ user_role”}},{$ unwind:“ $ user_role”},//在此处定义一些条件{$ match:{$ and:[{“ userName”:“ admin “}]}},//定义要获取的字段{$ project:{_id:1,电子邮件:1,userName:1,userPhone:” $ user_info.phone“,角色:” $ user_role.role“ ,}}]);
这将给出如下结果:
{“ _id”:ObjectId(“ 5684f3c454b1fd6926c324fd”),“ email”:“ admin@gmail.com”,“ userName”:“ admin”,“ userPhone”:“ 0000000000”,“ role”:“ admin” }