Javascript 在集合中搜索光标的元素
初始问题:在Meteor中,未实现distinct 我有一批飞行员:Javascript 在集合中搜索光标的元素,javascript,mongodb,meteor,Javascript,Mongodb,Meteor,初始问题:在Meteor中,未实现distinct 我有一批飞行员: Pilots : { _id, pilotcode : String, name : String, base : String } 如果我这样做 var pilotCursor = Pilots.find({}) 我把所有的飞行员都放在一个光标里 现在我有一系列航班: Flights : { ... pilot : String ... } 对于pilotCursor中的每个pilotcode,我想查找Flight
Pilots :
{
_id,
pilotcode : String,
name : String,
base : String
}
如果我这样做
var pilotCursor = Pilots.find({})
我把所有的飞行员都放在一个光标里
现在我有一系列航班:
Flights :
{
...
pilot : String
...
}
对于pilotCursor
中的每个pilotcode
,我想查找Flights
中是否至少有一个航班存在,然后打印找到的飞行员列表。
我怎样才能做到这一点呢?您可以通过聚合实现这一点,而无需在此处进行区分
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, ...]}
我相信Felix解决方案不会在Meteor中起作用,但会在Mongo中起作用。流星需要一些额外的触摸做聚合,就我所记得的,像这个流星包:流星黑客:聚合 如果您只需要飞行员列表,我会通过航班映射,将飞行员ID唯一地推送到一个阵列,然后返回飞行员: 我想飞行中的飞行员就是飞行员中的飞行员代码 将唯一值推送到数组是这样的:
const pilots = [];
Flights.find().map((flight) => {
if(pilots.indexOf(flight.pilot) === -1){
pilots.push(flight.pilot);
}
})
Pilots.find({ pilotcode: { $in: pilots } })
并公开所需的字段
光标映射是查询Mongo DB最有效的方法之一。是的,Flights中的pilot是Pilots中的pilotcode!实际上,这是可行的,并且不需要
导频。find()
,我只需要返回导频
数组。谢谢