Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在集合中搜索光标的元素_Javascript_Mongodb_Meteor - Fatal编程技术网

Javascript 在集合中搜索光标的元素

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

初始问题:在Meteor中,未实现distinct

我有一批飞行员:

Pilots : 
{
_id,
pilotcode : String,
name : String,
base : String
}
如果我这样做

var pilotCursor = Pilots.find({})
我把所有的飞行员都放在一个光标里

现在我有一系列航班:

Flights : 
{
...
pilot : String
...
}
对于
pilotCursor
中的每个
pilotcode
,我想查找
Flights
中是否至少有一个航班存在,然后打印找到的飞行员列表。
我怎样才能做到这一点呢?

您可以通过聚合实现这一点,而无需在此处进行区分

  • 首先在
    pilotcode
    字段中的航班和飞行员之间进行查找
  • 预测飞行员在
    $project
    阶段的飞行规模
  • 筛选出没有航班的文档
  • 将所有pilotcode分组到单个阵列中
  • 以下是查询:

    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()
    ,我只需要返回
    导频
    数组。谢谢