迭代mongodb中集合中单个键值的列表

时间:2016-02-02 12:02:14

标签: mongodb python-2.7 yahoo-finance

我有一组存储在mongodb中的财务数据。每个公司的符号都有其数据。问题是如何迭代集合并更改密钥的值,这是符号公司打印出整个集合,这是我的公司列表[' TSLA',' TYO&# 39;,' C'' LULU'' DTV'' SHS',' ZNGA']这是我的鳕鱼,它返回一家公司的数据:

   from pymongo import MongoClient
   import csv
   host = "localhost"
   port = 27017
   databaseName = "finance000"
   collection_name = "income"
   client = MongoClient(host, port)
   database = client[databaseName]
   collection = database[collection_name]
   def finance_data(symbol):
        Earnings_BeforeInterestAndTaxes = symbol['statement'[0]EarningsBeforeInterestAndTaxes']['content']                                               
       Total_Revenue = symbol['statement'][0]['TotalRevenue']['content']
       return Earnings_BeforeInterestAndTaxes,Total_Revenue
i =collection.find({'symbol':'C'})

with open('D:/INCOMEdata.csv', "w") as output:
writer = csv.writer(output, lineterminator='\n')
for key  in i :
    print finance_data(key)

    writer.writerow(finance_data(key)) 

1 个答案:

答案 0 :(得分:0)

如果我理解正确的话。您想要检索给定公司的文档/数据。该公司用符号示例表示' TYSLA'

如果那就是你需要的。以下是您的操作方法(假设每个符号都是唯一的)

company_data = collection.find({'symbol':'TYSLA'})

以上将返回字典。要访问文档中的元素,只需使用:

company_data['profit'] #profit is an example of an attribute name. You can use any attribute you like.

假设您有多个公司使用相同的符号。如果您使用上面的命令。你会得到一个光标。让每个公司只做一个for循环的例子:

company_data = collection.find({'symbol':'TYSLA'})

现在循环:

for one in company_date:
     print one['profit'] #python 2.7

现在编辑说法,例如利润属性使用 $ set

collection.update_one({'symbol':'TYSLA'},{'profit':100})

以上将使TYSLA的公司利润变为100

<强>更新

假设您的集合中的符号为[&#39; TSLA&#39;,&#39; TYO&#39;,&#39; C&#39;,&#39; LULU&#39 ;,&#39; DTV&#39;&#39; SHS&#39;,&#39; ZNGA&#39]。获取您使用的任何符号的数据(假设符号包含任何名称(只有一个名称)):

您使用 $或作为:

collection.find({"$or":[ {'symbol':'TSLA},{'symbol':'TYO},... ]},{}) #the ... are the rest of the names you need 

以上内容返回给定符号的整个数据。要返回细节Total_Revenue和Earnings_BeforeInterestAndTaxes,请使用以下内容:

collection.find({"$or":[ {'symbol':'TSLA},{'symbol':'TYO},... ]},{'Total_Revenue ':1,'Earnings_BeforeInterestAndTaxes ':1, _id:0 }) #if you remove _id it will always be returned

我希望有所帮助。