【问题标题】:MongoDB in python - Aggregate using $lookup and $outpython 中的 MongoDB - 使用 $lookup 和 $out 进行聚合
【发布时间】:2020-08-10 03:45:54
【问题描述】:

我目前正在尝试学习 MongoDB,但我是在 python 上做的。我有两张数据,我正在处理。 Sample data 。这不是完整的数据,而只是我正在处理的数据的一部分。实际数据的行数过多。

正如您在数据中看到的,我在表格 1 - 航班和表格 2 - 航空公司中有一个类似的列,即“OP_UNIQUE_CARRIER”。我想根据这些值聚合并在“航班”集合中创建一个新列,并输出一个名为“newairinfo”的新集合。这些集合(航班和航空公司)都在名为 'air' 的 db 下。

这是我的代码:

import pymongo
from pymongo import MongoClient
import pprint

client = MongoClient("localhost", 27017);
db = client.air
outputOrder = [("DAY_OF_WEEK", pymongo.DESCENDING), ("ARR_DELAY", pymongo.ASCENDING), ("TAIL_NUM", pymongo.DESCENDING), ("AIR_TIME", pymongo.ASCENDING)]

airlinescollection = db.airlines
flightcollection = db.flights
flightcollection.aggregate([
    {
        '$lookup': {
            'from': 'airlines', 
            'localField': 'OP_UNIQUE_CARRIER', 
            'foreignField': 'OP_UNIQUE_CARRIER', 
            'as': 'airline'
        }
    }, {
        '$out': 'newairinfo'
    }
])

results=flightcollection.find().sort(outputOrder).limit(10)
for result in results:
    print(result)

我已经尝试过这段代码,但它总是在最后抛出空结果。我已经根据聚合的 MongoDB 文档尝试了此代码,$lookup,$out 但它仍然是一样的。

请告诉我我可以做些什么来纠正它。

【问题讨论】:

    标签: python-3.x mongodb aggregate


    【解决方案1】:

    $out 阶段不产生结果,它将匹配的文档插入到指定的集合中。

    如果您想从管道中检索文档,请移除 $out 阶段。

    【讨论】:

    • 但是你认为聚合 $lookup 部分好吗?
    • 因此,如果我想将“航空公司”数据添加到“航班”中,我实际上应该使用 $out : flight ?
    • flightcollection.aggregate([ { '$lookup': { 'from': 'airlines', 'localField': 'OP_UNIQUE_CARRIER', 'foreignField': 'OP_UNIQUE_CARRIER', 'as': 'airline ' } }, { '$out': 'flightcollection' } ])
    • 如果您要让聚合工作,请删除 $out,因为它不能帮助您调试(您必须单独从目标集合中检索结果)并调试您的聚合管道。获得所需的结果集后,添加 $out 以将其写入集合(如果这是您想要的)。
    • 是的。这就是我想做的。但我还在学习这个。你能指导我获得 $lookup,aggregate 工作的正确方法吗?我有点迷茫,自过去 30 小时以来我一直在努力调试它。我尝试浏览示例并复制相同的示例,但由于某些奇怪的原因没有帮助。
    猜你喜欢
    • 1970-01-01
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 2019-01-21
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    相关资源
    最近更新 更多