1
組
蒙戈排序的子文檔我有一個成員集合:爲
{
"_id": ObjectId("597cace8e68903af813c4fe8"),
"lastName": "Smith",
"firstName": "Lloyd",
"captain": ObjectId("597cace8e68903af813c4fe8")
}
{
"_id": ObjectId("597cace8e68903af813c4fec"),
"lastName": "Jones",
"firstName": "Chris",
"captain": ObjectId("597cace8e68903af813c4fe8")
}
的隊長架構屬性指的是同一個集合中的另一個文檔。
我也有一個訂單集合:
{
"_id" : ObjectId("597cf7e165b6c3f5094080c9"),
"orderTotal" : 99.86,
"orderDate" : ISODate("2017-07-29T21:02:25.045Z"),
"orderProducts" : [
{
"title" : "Beads",
"totalItemPrice" : 39.96
},
{
"title" : "Doubloons",
"totalItemPrice" : 59.9
}
],
"memberId" : ObjectId("597cace8e68903af813c4fec")
}
的MEMBERID是指成員集的外鍵。
我正在準備一份如下所示的報告,並且由隊長歸類,按照升序排列隊長的名字(姓氏,名字)。在隊長羣體,我想成員以同樣的方式進行排序:
MEMBER ORDERS
Captain: Lloyd Smith
Members:
1. Chris Jones
* Beads: $39.96
* Doubloons: $59.90
* Total: $99.86
2. Lloyd Smith
* No Orders
etc..
Captain: George Taylor
Members:
1. John Brown
* Beads: $1.96
* Doubloons: $9.00
* Total: $10.96
2. Chip Castle
* Beads: $1.00
* Doubloons: $9.00
* Total: $10.00
etc...
我有一個查詢,主要是我想要做什麼,但它不成員名稱排序:
Member.aggregate(
{
$lookup : {
from : "orders",
localField : "_id",
foreignField : "memberId",
as : "tmpOrders"
}
},
{
$lookup : {
from : "members",
localField : "captain",
foreignField : "_id",
as : "tmpCaptains"
}
},
{
$group: {
_id: {
captain: "$captain",
captainFirstName: "$tmpCaptains.firstName",
captainLastName: "$tmpCaptains.lastName"
},
members: {
$push: "$$ROOT"
}
}
},
{
$project: {
"_id.captainFirstName": 1,
"_id.captainLastName": 1,
"members.firstName": 1,
"members.lastName": 1,
"members.tmpOrders.orderDate": 1,
"members.tmpOrders.orderTotal": 1,
"members.tmpOrders.orderProducts.title": 1,
"members.tmpOrders.orderProducts.totalItemPrice": 1
},
},
{
$sort: {
"_id.captainLastName": 1,
"_id.captainFirstName": 1
}
}
)
除了我的排序問題,我願意提供任何建議,以改善我的管道可讀性以及性能。