如何在Pymongo中选择几列并应用“ where”子句?

时间:2019-01-19 19:29:14

标签: mongodb pymongo

我有columns = db['WDIData'].find_one().keys()这样的数据返回:

Out[121]: dict_keys(['_id', 'Country Name', 'Country Code', 'Indicator Name', 'Indicator Code', '1960', '1961', '1962', '1963', '1964', '1965', '1966', '1967', '1968', '1969', '1970', '1971', '1972', '1973', '1974', '1975', '1976', '1977', '1978', '1979', '1980', '1981', '1982', '1983', '1984', '1985', '1986', '1987', '1988', '1989', '1990', '1991', '1992', '1993', '1994', '1995', '1996', '1997', '1998', '1999', '2000', '2001', '2002', '2003', '2004', '2005', '2006', '2007', '2008', '2009', '2010', '2011', '2012', '2013', '2014', '2015', '2016', '2017'])

样本: db['WDIData'].find_one()

{'_id': ObjectId('5c42044b90d2b00f248c73bd'),
 'Country Name': 'Arab World',
 'Country Code': 'ARB',
 'Indicator Name': 'Access to electricity (% of population)',
 'Indicator Code': 'EG.ELC.ACCS.ZS',
 '1960': nan,
 '1961': nan,
 '1962': nan,
 '1963': nan,
 '1964': nan,
 '1965': nan,
 '1966': nan,
 '1967': nan,
 '1968': nan,
 '1969': nan,
 '1970': nan,
 '1971': nan,
 '1972': nan,
 '1973': nan,
 '1974': nan,
 '1975': nan,
 '1976': nan,
 '1977': nan,
 '1978': nan,
 '1979': nan,
 '1980': nan,
 '1981': nan,
 '1982': nan,
 '1983': nan,
 '1984': nan,
 '1985': nan,
 '1986': nan,
 '1987': nan,
 '1988': nan,
 '1989': nan,
 '1990': 74.3842390444175,
 '1991': 74.38222008801621,
 '1992': 74.3131602867208,
 '1993': 75.3493248355472,
 '1994': 75.7885216921504,
 '1995': 76.214137971973,
 '1996': 77.20514987247721,
 '1997': 77.5737299371645,
 '1998': 78.39551105118579,
 '1999': 78.9655316665757,
 '2000': 78.7623297831137,
 '2001': 80.1492565068256,
 '2002': 80.3599784304366,
 '2003': 81.35478764291192,
 '2004': 82.66240234337971,
 '2005': 83.6875762079726,
 '2006': 85.8002961272357,
 '2007': 84.7357232408233,
 '2008': 85.4328268149662,
 '2009': 85.1898151220048,
 '2010': 86.1361336464124,
 '2011': 86.782683284186,
 '2012': 87.28824394021481,
 '2013': 88.38970514764809,
 '2014': 88.07677413801581,
 '2015': 88.5179673938546,
 '2016': 88.7686540243445,
 '2017': nan}

什么是年份:

regex = re.compile("[0-9]{4}")
years = list(filter(regex.search, columns))
year = years[40]

出[132]:“ 2000”

data = db['WDIData'].find({}, {'_id': 1, 'Country Name': 1, 'Country Code': 1, 'Indicator Name': 1, 
         'Indicator Code': 1, year: 1})

它可以工作,但是我现在不知道如何使用where。我正在寻找这样的东西: data = db['WDIData'].find({'_id': 0, 'Country Name': 1, 'Indicator Name': 1, year: 1}).where({'Indicator Name': ind})

但是得到TypeError:代码必须是str的实例。不确定如何处理。应该直观,不是吗?

2 个答案:

答案 0 :(得分:1)

游标对象没有.where方法。您需要使用filter参数。请参阅.find文档。

您首先需要使用过滤器选项选择文档,然后投影字段。

db['WDIData'].find(
    {'Indicator Name': ind},
    {
        'Country Name': 1, 
        'Country Code': 1, 
        'Indicator Name': 1, 
        'Indicator Code': 1, 
        'year': 1
    }
)

答案 1 :(得分:0)

由于给出了建议,我找到了答案。采用.find方法。只需按正确的顺序传递参数,以便它们充当位置并选择:

cur = db['WDIData'].find({'Indicator Name': ind}, {'_id': 0, 'Country Name': 1, 'Country Code': 1, year: 1})