从Mongo shell中读取文件

17

我有一个名为wordlists的数据库和一个名为rockyou的集合。

我有一个名为rockyou的文件,其内容如下:

123456
12345
123456789
password
iloveyou
princess
1234567
rockyou
12345678
abc123

我想做的是将文件rockyou中的所有内容加载到我的wordlists DB的集合rockyou中。我已经尝试在谷歌上搜索,但对于Mongo来说似乎资源很少。我真的需要一些帮助,也许是一些适用于这个新的数据库应用程序的好资源。

谢谢!

**编辑* 这里是我使用过的命令和我尝试过的一些方法。

use wordlists
db.createCollection("rockyou")
db.rockyou.insert(copyFile(~/wordlists/rockyou))

我曾尝试其他的插入方法,但现在意识到它们比这个还要错...


@SalvadorDali,如果资源如此丰富,请给我一个链接,告诉我如何插入一个纯文本文件而不是JSON格式的文件,我将把所有声望点数都给你。 - Dylan
@Dylan,你希望你的集合看起来是什么样子的? - Salvador Dali
我的文本文件中的每一行都包含在每个项目中。我计划让我的数据库包含多个集合,每个集合由其对应的文本文件中的一行组成。当涉及到我的集合中的条目的事件发生时,我将添加另一列,其中包含来自该事件的数据。但基本上只是一个包含文本文件每一行的单独列。 - Dylan
@ Dylan,我并不是因为你不知道如何解决问题而感到沮丧(其实我也不知道如何解决很多我的问题),而是失望你甚至没有展示出你的尝试。我的评论主要有三个原因:1)在更新之前你只发布了一个需求(看起来像是让别人替你完成工作)。2)你并没有说明你想让你的集合看起来是什么样子,想要使用什么工具。3)你责怪缺乏资源,这是不正确的。请在未来展示一下你尝试过什么以及出了什么问题。 - Salvador Dali
2个回答

45
如果您真的只想使用mongoshell,您可以使用cat()命令并执行以下操作(txt不是必需的,这只是我的文件名):
use wordlists
var file = cat('path/to/yourFile.txt');  // read the file
var words = file.split('\n'); // create an array of words
for (var i = 0, l = words.length; i < l; i++){ // for every word insert it in the collection
    db.rockyou.insert({'word': words[i]}); 
}

这是在Mongo 3.0.1上测试的,产生了类似于以下内容:
{ "_id" : ObjectId("551491ee909f1a779b467cca"), "word" : "123456" }
{ "_id" : ObjectId("551491ee909f1a779b467ccb"), "word" : "12345" }
...
{ "_id" : ObjectId("551491ee909f1a779b467cd3"), "word" : "abc123" }

但是我想在这里引入一个应用程序逻辑(例如使用Python):

import pymongo
connection = pymongo.Connection()
collection = connection.wordlists.rockyou

with open('path/to/yourFile.txt') as f:
    for word in f.readlines():
        collection.insert({'word': word.rstrip()})

如果资源如此丰富,请给我一个链接,告诉我如何插入一个纯文本文件而非JSON格式的文件,我将奉上所有声望点数。虽然这不是一个链接,但我仍然很乐意把它们给你。除了两天后创建赏金之外,现在我该如何把它们给你? - Dylan
@Dylan 我添加了一个链接。赏金是我所知道的唯一选项,但说实话并不是强制性的。我只是为了好玩而写的。如果你指定你只需要使用mongoshell,那么你的问题将变得更好。如果你可以使用任何东西,这个问题就很简单,但是用mongoshell找到解决方案会更加困难。 - Salvador Dali
哈哈,我会编辑我的问题并包含这些信息。由于我的大文件,这种方法不起作用,因此我将研究其他选项,我不仅依赖于shell。我想我会研究你谈到的一些应用程序抽象,例如pymongo。谢谢,我将在2天内创建奖励,然后通知您以便您可以回答并获得奖励;) 我说过我会的! - Dylan
我会JavaScript,那你会建议使用Node.js吗? - Dylan
cat命令奏效了,救了我的一天。现在我可以使用cat命令将JSON文件加载到Mongo shell脚本中。 - shijin
显示剩余3条评论

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接