将数据汇集到两个集合中

时间:2018-06-23 00:37:13

标签: mongodb

有两个集合,第一个集合称为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,因此它可以满足我之前提到的条件。

1 个答案:

答案 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” }