Javascript 如何筛选文档中的嵌入文档?
我当时正在做一个包含大量数据库操作的综合作业,在筛选文档中的嵌入文档时遇到问题,我一直都很顺利 我的文件看起来像Javascript 如何筛选文档中的嵌入文档?,javascript,mongodb,Javascript,Mongodb,我当时正在做一个包含大量数据库操作的综合作业,在筛选文档中的嵌入文档时遇到问题,我一直都很顺利 我的文件看起来像 { flightId: "IND-101", AircraftName: "Delta Airlines", fare: 600, availableSeats: 5, status: "Running", bookings: [ { customerId: "P1001",
{
flightId: "IND-101",
AircraftName: "Delta Airlines",
fare: 600,
availableSeats: 5,
status: "Running",
bookings: [
{
customerId: "P1001",
bookingId: 2001,
noOfTickets: 3,
bookingCost: 1800
},
{
customerId: "S1001",
bookingId: 2003,
noOfTickets: 2,
bookingCost: 1200
}
]
},
{
flightId: "IND-102",
AircraftName: "JetBlue",
fare: 750,
availableSeats: 20,
status: "Cancelled",
bookings: [
{
customerId: "P1001",
bookingId: 2002,
noOfTickets: 3,
bookingCost: 2250
},
{
customerId: "G1001",
bookingId: 2004,
noOfTickets: 2,
bookingCost: 1500
}
]
}
我已经尝试了下面的代码,但显然,它正在返回所有的预订文档
return flightModel.find({ $and: [{ flightId: flightId }, { "bookings.customerId": customerId }] }, { bookings:1, _id: 0 })
变量flightId和customerId是使用函数给出的。
如果我将flightId指定为IND-101,将customerID指定为P1001,那么所需的输出是
{
customerId: "P1001",
bookingId: 2001,
noOfTickets: 3,
bookingCost: 1800
}
那我该怎么做呢?如何根据筛选条件选择特定的嵌入文档?您可以对$filter运行聚合查询,并对所需字段进行$project。 这样的办法应该行得通
let pipeline = [
{$match: {flightId: flightId}},
{$filter: {
input: '$bookings'
as: 'booking',
cond: {$eq: {'$$booking.customerId', customerId}}
}},
{$project: {
bookings: "$bookings"
}}
]
flightModel.aggregate(pipeline);
您可能需要将bookings提取到它自己的集合中,或者执行聚合查询并对所需的字段进行$project。我对聚合不太了解,但这对我很有帮助。谢谢