有一个代理商表 - 每个代理商可以拥有多个用户 我想要users []数组但只有有限的字段
这个可行,但它将太多的信息放入users []数组......
agencyTable.aggregate([
{
$match: {}
},
{
$sort: {
activityDate: 1
}
},
{
$lookup: {
from: "users",
localField: "_id",
foreignField: "agency",
as: "users"
}
},
{ $unwind: "$users" },
{ $match: { 'users.type': 'agent' } },
{
$group: {
"_id": "$_id",
"phone": { "$first": "$phone" },
"activityDate": { "$first": "$activityDate" },
"users": { "$push": "$users" }
}
},
{
$project: {
"_id" : 1,
"phone" : 1,
"activityDate" : 1,
"users" : 1
// "userID" : "$users._id",
// "userName" : "$users.name",
// "userPhone" : "$users.phone",
}
}]
然后我尝试取消注释下面的3行,但后来发生了一些奇怪的事情......
vm.agencyRecord : [
{
"_id": "Mic Agency Ltd",
"phone": "ZZZZ",
"activityDate": 1521460192,
"userID": [
"michael@micagency.com",
"nana@micagency.com",
"gogo@micagency.com",
"wollahsom@micagency.com",
"sdfsdf@werwerwer.ccc",
"werwer@ertert.dd"
],
"userName": [
"Michael Agent",
"Nana Banana",
"Gogo Banana",
"Wollah Woldsom",
"weqweqweqwe",
"werwer"
],
"userPhone": [
"99 22 99 22 33",
"111 222 999",
"111 222 999",
"234234234",
"34234234234",
"werwerwer"
]
},
原因那不是我想要的。我希望保留相同的用户阵列,只需要少得多的字段。
这可能吗?
答案 0 :(得分:2)
使用$map
限制字段。
$$
语法,用于访问usr
用户变量以引用元素,后跟您希望保留的字段映射。
像
这样的东西{
"$project":{
"_id":1,
"phone":1,
"activityDate":1,
"users":{
"$map":{
"input":"$users",
"as":"usr",
"in":{
"userID":"$$usr._id",
"userName":"$$usr.name",
"userPhone":"$$usr.phone"
}
}
}
}
}
您可以使用$addFields
阶段而不是$project
阶段来简化汇总。
{
"$addFields":{
"users":{
"$map":{
"input":"$users",
"as":"usr",
"in":{
"userID":"$$usr._id",
"userName":"$$usr.name",
"userPhone":"$$usr.phone"
}
}
}
}
}