我正在使用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))
“结果”的输出正是我想要的,这意味着聚合已起作用。
所以我试图了解自己在做错还是愚蠢?如果有人可以提供帮助,那将真的很有帮助。
我犯了一个小错误。如其中一条注释所述,$ 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/