我想在MongoDB中有效地存储原始JSON流(通过Twitter或NYTimes),以便稍后我可以使用Lucene或Hadoop索引数据(NYTimes文章或推文/用户名).在Mongo中存储数据最聪明的方法是什么?我应该只管道JSON,还是有更好的东西?我只使用一台机器用于mongodb,有3个副本.
是否有一种高效(智能)的方式来编写查询或存储我的数据以更好地优化搜索查询?
我正在尝试使用pymongo在mongodb中插入一个64位无符号整数.整数是CRC64算法的输出.我试着跟随:
long(crc64(unicode(kw).encode('unicode-escape'))))
Run Code Online (Sandbox Code Playgroud)
如果我将其插入mongodb,它开始抱怨mongodb只支持64位整数.接下来我尝试将其转换为带符号的64位int,如下所示:
ctypes.c_int64(crc64(unicode(kw).encode('unicode-escape')))).value
Run Code Online (Sandbox Code Playgroud)
哪种工作,mongodb停止抱怨我的int的大小,但是当我看到mongodb中的数据时,我得到了这个:
{
"_id" : {
"floatApprox" : -5307924876159732000,
"top" : 3059119730,
"bottom" : 2651469802 },
"keyword" : "redacted",
"normal_hash" : {
"floatApprox" : -671156942315906300,
"top" : 4138701393,
"bottom" : 549001936
}
}
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?有没有办法将64位int作为一个int放入db(不关心它是有符号还是无符号.)
如何检查PyMongo连接仍然存在?有没有优雅的方法来做这个或只是尝试一个简单的查询和解析器结果?
我目前正在尝试将几个文本文件加载到MongoDB中(它们是JSON格式).
我尝试使用操作系统,但我似乎遇到了麻烦.我目前的方法是:
>>> import pymongo
>>> import os
>>> import json
>>> from pymongo import Connection
>>> connection = Connection()
>>> db = connection.Austin
>>> collection = db.tweets
>>> collection = db.tweet_collection
>>> db.tweet_collection
Collection(Database(Connection('localhost', 27017), u'Austin'), u'tweet_collection')
>>> collection
Collection(Database(Connection('localhost', 27017), u'Austin'), u'tweet_collection')
>>> tweets = db.tweets
>>> tweet = open(os.path.expanduser('~/Tweets/10_7_2012_12:09-Tweets.txt'),'r')
>>> for line in tweet:
... d = json.loads(line)
... tweets.insert(d)
...
Run Code Online (Sandbox Code Playgroud)
用于插入单个推文.我希望能够打开多个文件并运行相同的代码片段,即将JSON转换为python词典的for循环,并自动将其插入到集合中.
有没有人有一个如何做到这一点的完整例子,并附有解释?
当我们讨论这个主题时,我试图使用对数据库理解不够的MongoDB(愚蠢和愚蠢,我知道),但MongoDB可以同时支持多个数据库实例,并存储集合,这些是集合的文件,你可以插入单个文件,对吗?
(另外,请忽略集合推文和tweet_collection之间的不一致..我只是在试验以获得更好的理解)
我已经开始为mongodb编写一个简单的模块来使用.我是python的新手,我写的代码有问题:
import pymongo
class mongoDB():
conn = object
def __init__(self):
global conn
self.conn = pymongo.Connection("localhost",27017)
def CreateCollection(self,name =""):
self.dbCollection = conn.name
return self.dbCollection
if __name__ == '__main__':
database = mongoDB
collection = database.CreateCollection("Hello")
Run Code Online (Sandbox Code Playgroud)
首先,我认为我的代码可能没有什么问题,如果你能发现它并纠正我的话.此外,我一直在得到这个错误:
collection = database.CreateCollection("Hello")
TypeError: unbound method CreateCollection() must be called with mongoDB
instance as first argument (got str instance instead)
Run Code Online (Sandbox Code Playgroud)
我希望能够在类的构造函数中创建连接,然后有一个创建集合并返回它的方法,还有另一种插入删除和更新实体的方法
我在Python中编写功能以确保mongodb集合的存在,类型和大小.大多数这些集合都有上限.我知道mongo shell包含mycollection.iscapped(),但pymongo似乎不支持此功能.
在pymongo的背景下,判断一个集合是否有上限集合的最佳方法是什么?
如果我有一个列表字段类似于下面的集合.
class Post(Document):
tags = ListField(StringField())
Run Code Online (Sandbox Code Playgroud)
假设我有一个贴有标签的帖子:有趣,有趣.
如果我想搜索带有标签的帖子满足任何搜索条件,我该怎么办?
如果我将搜索词放在"有趣"和"奇妙"中,则上面的帖子应该在结果集中.
我试图阅读文档,但似乎没有这样的运算符."all"和"in"相似但不能执行我想要的.
谢谢!
干杯,克里斯
我正在尝试这样做:
event = coll.find_one({"_id": {"$oid": event_id}})
Run Code Online (Sandbox Code Playgroud)
其中event_id是ObjectId中的字符串:
event_id='50bbd48eefbdd2a1e83bc440'
Run Code Online (Sandbox Code Playgroud)
但事件最终是空的.我确定这不是你在pymongo中用ObjectId找到文件的方式,但是我已经搜索了一段时间并且没有弄清楚如何.任何帮助,将不胜感激.谢谢!
我正在尝试根据模式验证插入的文档,并试图找到一种方法来验证插入的文档。
像MongoEngine这样的图书馆说他们在做这项工作,但是有没有办法直接通过进行文件验证pymongo?
在添加$ or选项之前,我似乎无法使其与pymongo一起使用。我是否错过了一些明显的东西
dataout = releasescollection.find( { $or: [{"l_title":{"$regex": "i walk the line", "$options": "-i"}}, {"artistJoins.0.artist_name":{"$regex": "Johnny Cash", "$options": "-i"}}]}).sort('id', pymongo.ASCENDING).limit(25)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "discogs.py", line 51
dataout = releasescollection.find( { $or: [{"l_title":{"$regex": "i walk the line", "$options": "-i"}}, {"artistJoins.0.artist_name":{"$regex": "Johnny Cash", "$options": "-i"}}]})
^
SyntaxError: invalid syntax
直接在mongo中运行以下内容可以工作,但在切换到python时我丢失了一些东西
db.releases.find( { $or: [{"l_title":{"$regex": "i walk the line", "$options": "-i"}}, {"artistJoins.0.artist_name":{"$regex": "Johnny Cash", "$options": "-i"}}]}).sort({'id':1}).limit(25)
pymongo ×10
mongodb ×8
python ×7
mlab ×1
mongoengine ×1
python-2.7 ×1
twitter ×1
unsigned ×1
validation ×1