如何在Pymongo聚合脚本中定义和使用变量

时间:2017-10-11 04:01:07

标签: mongodb mongodb-query aggregation-framework pymongo pymongo-3.x

我正在尝试了解mongodb聚合。我已经能够获得单个输出的命令。我现在正在研究一个pymongo脚本来解析脏集合并将已消毒的数据输出到一个干净的集合中。我坚持如何正确定义变量,以便我可以在聚合命令中使用它们。请原谅我,如果这是一个微不足道的事情。但我现在已经搜索了一段时间的在线文档,但我没有运气。

到目前为止这是脚本:

from pymongo import MongoClient
import os, glob, json
#
var_Ticker = "corn"
var_Instrument = "Instrument"
var_Date = "Date"
var_OpenPrice = "prices.openPrice.bid"
var_HighPrice = "prices.highPrice.bid"
var_LowPrice = "prices.lowPrice.bid"
var_ClosePrice = "prices.closePrice.bid"
var_Volume = "prices.lastTradedVolume"
var_Unwind = "$prices"
#
#
client = MongoClient()
db = client.cmdty
col_clean = var_Ticker + "_clean"
col_dirty = var_Ticker + "_dirty"
db[col_dirty].aggregate([{$project:{_id:0,var_Instrument:1,var_Date:1,var_OpenPrice:1,var_HighPrice:1,var_LowPrice:1,var_ClosePrice:1,var_Volume:1}},{$unwind:var_Unwind},{$out:col_clean}])

这是我得到的错误:

>>> db[col_dirty].aggregate([{$project:{_id:0,var_Instrument:1,var_Date:1,var_OpenPrice:1,var_HighPrice:1,var_LowPrice:1,var_ClosePrice:1,var_Volume:1}},{$unwind:var_Unwind},{$out:col_clean}])
  File "<stdin>", line 1
    db[col_dirty].aggregate([{$project:{_id:0,var_Instrument:1,var_Date:1,var_OpenPrice:1,var_HighPrice:1,var_LowPrice:1,var_ClosePrice:1,var_Volume:1}},{$unwind:var_Unwind},{$out:col_clean}])
                              ^
SyntaxError: invalid syntax

如果我取出变量并使用正确的值,则该命令可以正常工作。

非常感谢任何协助。

1 个答案:

答案 0 :(得分:1)

在Python中,你必须包含一个文字字符串,如&#34; $ project&#34;在引号中:

db[col_dirty].aggregate([{"$project":{"_id":0,var_Instrument:1 ...

&#34; _id&#34;也是如此,这是一个文字字符串。这与Javascript处理字典键的方式不同。

请注意,你应该在var_Instrument周围加上引号,因为那不是字符串文字,它是一个值为字符串的变量。