我正在使用mongodb并需要帮助来加入外部字段是数组中值的集合。
收集1:
> db.properties.findOne({'agentid':'mike@gmail.com'},{'agentid':1,'contact':1})
{
"_id" : ObjectId("56d2cc296f07d417008b4567"),
"agentid" : "mike@gmail.com",
"contact" : [
{
"type" : "listingAgent",
"id" : "1",
"name" : "Mike",
"telephoneType" : "",
"telephone" : "",
"email" : "mike@gmail.com"
}
]
}
收集2:
> db.agents.findOne({'email':'mike@gmail.com'})
{
"_id" : ObjectId("5979d1400045fecc0800004c"),
"id" : "35",
"agentID" : "mike@gmail.com",
"email" : "mike@gmail.com",
"name" : "Mike",
"telephone" : "",
"status" : true
}
收集3:
> db.users.findOne({'email':'mike@gmail.com'})
{
"_id" : ObjectId("5979d0e20045feac0d00003f"),
"id" : "20",
"email" : "mike@gmail.com",
"type" : "publisher",
"status" : "inactive",
}
现在,根据上述收藏品,我需要汇总用户并需要加入“用户”#39;与代理人一起收集'和'属性'。
问题在于集合的属性'有外国电子邮件'作为数组中的值,因此我无法对其应用查找。
我需要将这些收藏品与字段'电子邮件'但由于有外国电子邮件'作为属性中数组中的值'收藏品我没有得到结果。
我现在显示我的尝试如下
$query =
array(
array('$lookup'=>array(
'from'=>'agents`',
'localField'=>'email',
'foreignField'=>'email',
'as'=>'users_agents'
)
),
array('$unwind'=>'$properties.contact'),
array('$lookup'=>array(
'from'=>'properties',
'localField'=>'email',
'foreignField'=>'contact.email',
'as'=>'users_properties'
)
),
array('$match'=>array(
'$and'=>array(array('users_properties.offline'=>false),
array('users_agents.status'=>true)))),
array('$project'=>array(
'_id'=>1,
'id'=>1,
'username'=>1,
'firstname'=>1,
'lastname'=>1,
'email'=>1,
'type'=>1,
'status'=>1,
)
),
);
$collection_users->aggregate ($query );
任何人都可以帮帮我。
答案 0 :(得分:0)
db.Properties.aggregate([{
$unwind: "$contact"
},
{
$lookup: {
from: "Users",
localField: "contact.email",
foreignField: "email",
as: "user"
}
},
{
$lookup: {
from: "agents",
localField: "contact.email",
foreignField: "email",
as: "agent"
}
}])