1

我在一个名为“hello”的 mongo 集合中有数据。文件看起来像:

{ 
name: ..., 
size: ..., 
timestamp: ISODate("2013-01-09T21:04:12Z"), 
data: { text:..., place:...},
other: ...
}

我想将每个文档中的时间戳和文本导出到 CSV 文件中,第一列是时间戳,第二列是文本。

我尝试创建一个新集合(hello2),其中文档只有时间戳和文本。

data = db.hello
for i in data:
    try:
        connection.me.hello2.insert(i["data"]["text"], i["timestamp"])
    except:
        print "Unable", sys.exc_info()

然后我想使用 mongoexport:

mongoexport --db me --collection hello2 --csv --out /Dropbox/me/hello2.csv

但这不起作用,我不知道如何进行。

PS:我还想仅将 ISODate 的时间存储在 CSV 文件中,即仅 21:04:12 而不是 ISODate("2013-01-09T21:04:12Z")

感谢您的帮助。

4

1 回答 1

2

您可以直接从数据集合中导出,无需临时集合:

for r in db.hello.find(fields=['text', 'timestamp']):
     print '"%s","%s"' % (r['text'], r['timestamp'].strftime('%H:%M:%S'))

或写入文件:

with open(output, 'w') as fp:
   for r in db.hello.find(fields=['text', 'timestamp']):
       print >>fp, '"%s","%s"' % (r['text'], r['timestamp'].strftime('%H:%M:%S'))

To filter out duplicates and print only most recent ones, the process should be split in two steps. First, accumulate data in a dictionary:

recs = {}
for r in d.foo.find(fields=['data', 'timestamp']):
    text, time = r['data']['text'], r['timestamp']
    if text not in recs or recs[text] < time:
        recs[text] = time

and then output the dictionary content:

for text, time in recs.items():
    print '"%s","%s"' % (text, time.strftime('%H:%M:%S'))
于 2013-01-10T15:28:51.530 回答