【问题标题】:Not able to combine data from multiple collections in mongodb using aggregation? (Pymongo)无法使用聚合在 mongodb 中组合来自多个集合的数据? (皮蒙戈)
【发布时间】:2020-06-15 09:34:56
【问题描述】:

我正在使用 pymongo 更新 mongodb 中的一些数据。我正在尝试使用聚合和查找将两个集合中的数据合并为一个。基本上我正在尝试做这样的事情:https://stackoverflow.com/a/35948843

这是我的代码:

client = pymongo.MongoClient('localhost', 27017) #Connecting to mongo
db = client['<Database name>'] 
collection = db["<Collection name 1>"]

collection.aggregate([{
    "$lookup": {
            "from": "<Collection name 2>",
            "localField": "Symbol",
            "foreignField": "Symbol",
            "as": "Extra Info"
        }
}])

虽然我没有收到任何错误,但我发现我的集合尚未更新且聚合未起作用

我尝试输出聚合结果来检查是否有错误:

results = collection.aggregate([{
    "$lookup": {
            "from": "<Collection name 2>",
            "localField": "Symbol",
            "foreignField": "Symbol",
            "as": "Extra Info"
        }
}])
print (list(results))

“结果”的输出结果正是我想要的,这意味着聚合已经奏效。

所以我想了解我做错了什么或愚蠢?如果有人可以提供帮助,那将非常有帮助。

【问题讨论】:

  • 聚合查询返回一个游标 - 它不更新集合..
  • 您是想将聚合结果存储在原始集合之一还是新集合中?
  • 理想情况下,我只想将其存储在原始集合中并删除其他集合

标签: python mongodb aggregate pymongo


【解决方案1】:

我犯了一个小错误。如其中一个 cmets 所述,$lookup 仅返回一个游标,实际上并不更新集合。要更新或创建新集合,$out 可能是一个不错的选择。代码如下:

client = pymongo.MongoClient('localhost', 27017) #Connecting to mongo
db = client['<Database name>'] 
collection = db["<Collection name 1>"]

collection.aggregate([{
    "$lookup": {
            "from": "<Collection name 2>",
            "localField": "Symbol",
            "foreignField": "Symbol",
            "as": "Extra Info"
        }
{"$unwind": "$Extra_info"},
{"$out" : "<Collection name 3>" }}])

注意:$unwind 用于解构文档内的数组。此处的文档:https://docs.mongodb.com/manual/reference/operator/aggregation/unwind/

【讨论】:

    猜你喜欢
    • 2013-04-26
    • 1970-01-01
    • 1970-01-01
    • 2020-06-13
    • 2020-08-08
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    相关资源
    最近更新 更多