最初的问题:在Meteor中,未实现明确。
我有一群飞行员:
Pilots :
{
_id,
pilotcode : String,
name : String,
base : String
}
如果我这样做
var pilotCursor = Pilots.find({})
我把光标中的所有飞行员都拿走了;
现在我有一系列航班:
Flights :
{
...
pilot : String
...
}
对于pilotcode
中的每个pilotCursor
,我想查找是否至少在Flights
的航班中退出,然后打印找到的飞行员列表。
我怎么能这样做?
答案 0 :(得分:1)
你可以通过聚合实现这一点,这里不需要明确。
pilotcode
字段上的航班和飞行员之间进行查找$project
阶段预测试点航班的大小这是查询:
db.Pilots.aggregate([
{$lookup: {from: "Flights", localField: "pilotcode", foreignField: "pilot", as: "pilot"}},
{$project: { pilotcode: 1, size: {$size: "$pilot"}}},
{$match: {size: {$gt: 0}}},
{$group: {_id: null, listPilotCode: {$push: "$pilotcode"}}}
])
这应输出:
{"_id": null, "listPilotCode": [ pilotcode1, pilotcode2, ...]}
答案 1 :(得分:1)
我相信Felix解决方案不适用于Meteor,但会使用Mongo。据我记得,流星需要一些额外的触摸才能进行聚合,就像这个Meteor包:meteorhacks:aggregate
如果您只需要一个飞行员列表,我会在飞行中进行映射,将飞行员ID唯一地推送到阵列,然后返回飞行员:
我认为飞行中的飞行员是飞行员的飞行员代码。
将唯一值推送到数组是这样的:
const pilots = [];
Flights.find().map((flight) => {
if(pilots.indexOf(flight.pilot) === -1){
pilots.push(flight.pilot);
}
})
Pilots.find({ pilotcode: { $in: pilots } })
并公开您需要的字段。
光标映射是查询Mongo DB的最有效方法之一。