【发布时间】:2020-09-19 22:59:50
【问题描述】:
我有三个系列: ServiceCate 存储有关 HairSalon 内部服务的信息
ServiceCate:
{
"_id" : ObjectId("5f64cb4d11eaeaf154047d30"),
"serviceCode" : NumberLong(2),
"serviceName" : "Take earwax"
}
{
"_id" : ObjectId("5f64cb9511eaeaf154047deb"),
"serviceCode" : NumberLong(3),
"serviceName" : "Shampoo"
}
{
"_id" : ObjectId("5f64cbec11eaeaf154047eb3"),
"serviceCode" : NumberLong(4),
"serviceName" : "Haircuts"
}
收款商店付款信息。
付款:
{
"_id" : ObjectId("5f64cd8611eaeaf15404825a"),
"paymentCode" : NumberLong(10),
"customerCode" : "2000000001",
"orderNumber" : "TT20000001",
"date" : ISODate("2020-06-01T00:07:00.000Z"),
"staffCode" : NumberLong(3)
}
{
"_id" : ObjectId("5f64cdc011eaeaf1540482ea"),
"paymentCode" : NumberLong(11),
"customerCode" : "2000000002",
"orderNumber" : "TT20000002",
"date" : ISODate("2020-06-01T00:07:00.000Z"),
"staffCode" : NumberLong(3)
}
{
"_id" : ObjectId("5f64ce0111eaeaf15404837c"),
"paymentCode" : NumberLong(12),
"customerCode" : "2000000003",
"orderNumber" : "TT20000003",
"date" : ISODate("2020-06-01T00:07:00.000Z"),
"staffCode" : NumberLong(4)
}
PaymentDetails 存储有关每项服务(理发、洗发水……)的详细付款的所有信息
付款详情
{
"_id" : ObjectId("5f64cea611eaeaf154048508"),
"paymentDetailCode" : NumberLong(1),
"paymentCode" : NumberLong(10),
"serviceCode" : NumberLong(2),
"money" : "180000.0"
}
{
"_id" : ObjectId("5f64cfed11eaeaf154048897"),
"paymentDetailCode" : NumberLong(20),
"paymentCode" : NumberLong(10),
"serviceCode" : NumberLong(3),
"money" : "180000.0"
}
{
"_id" : ObjectId("5f64d2c311eaeaf154048fea"),
"paymentDetailCode" : NumberLong(20),
"paymentCode" : NumberLong(10),
"serviceCode" : NumberLong(4),
"money" : "180000.0"
}
我想获得一个订单号(一个人)的付款,并详细支付美发沙龙服务(如理发、三宝、取耳垢)的费用,我喜欢下面。
db.Payments.aggregate([
{
$match: {
$and:[{"orderNumber": "TT20000001"}]
}
},
{
$lookup: {
from: "PaymentDetails",
localField: "paymentCode",
foreignField: "paymentCode",
as: "PaymentDetails"
}
},
// {
// $lookup: {
// from: "ServiceCate",
// localField: "PaymentDetails.serviceCode",
// foreignField: "serviceCode",
// as: "PaymentDetails.serviceCode",
// }
// },
]);
下面是我的结果:
{
"_id" : ObjectId("5f64cd8611eaeaf15404825a"),
"paymentCode" : NumberLong(10),
"customerCode" : "2000000001",
"orderNumber" : "TT20000001",
"date" : ISODate("2020-06-01T00:07:00.000Z"),
"staffCode" : NumberLong(3),
"PaymentDetails" : [
{
"_id" : ObjectId("5f64cea611eaeaf154048508"),
"paymentDetailCode" : NumberLong(1),
"paymentCode" : NumberLong(10),
"serviceCode" : NumberLong(2), // I want to populate this field
"money" : "180000.0"
},
{
"_id" : ObjectId("5f64cfed11eaeaf154048897"),
"paymentDetailCode" : NumberLong(20),
"paymentCode" : NumberLong(10),
"serviceCode" : NumberLong(3),// I want to populate this field
"money" : "180000.0"
},
{
"_id" : ObjectId("5f64d2c311eaeaf154048fea"),
"paymentDetailCode" : NumberLong(20),
"paymentCode" : NumberLong(10),
"serviceCode" : NumberLong(4),// I want to populate this field
"money" : "180000.0"
}
]
}
我想填充“serviceCode”字段以获取详细信息服务,我添加了此代码但它不起作用。
{
$lookup: {
from: "ServiceCate",
localField: "PaymentDetails.serviceCode",
foreignField: "serviceCode",
as: "PaymentDetails.serviceCode",
}
}
我多次尝试使用谷歌搜索。我还发现这个链接enter link description here 可能看起来像我的问题,我已经尝试但无法正常工作。请帮我检查一下。非常感谢你
【问题讨论】:
标签: mongodb mongoose mongodb-query aggregation-framework nodes