我可以简单地通过连接到MongoDB服务器来创建新数据库,还是有另一种方法可以使用Python创建它?如果是这样,这是怎么做到的?
我正在做一个将一些数据写入mongodb的python脚本.完成后,我需要关闭连接并释放一些资源.
如何在Python中完成?
我正在使用mongodb,我以这种方式将datetime存储在我的数据库中
约会"17-11-2011 18:00"我存储:
date = datetime.datetime(2011, 11, 17, 18, 0)
db.mydatabase.mycollection.insert({"date" : date})
Run Code Online (Sandbox Code Playgroud)
我想做这样的请求
month = 11
db.mydatabase.mycollection.find({"date.month" : month})
Run Code Online (Sandbox Code Playgroud)
要么
day = 17
db.mydatabase.mycollection.find({"date.day" : day})
Run Code Online (Sandbox Code Playgroud)
谁知道怎么做这个查询?
我试图运行一个简单的连接到pymongo但它一直返回,连接被拒绝
这是我尝试过的:
>>>from pymongo import Connection
>>>connection = Connection('localhost',27017)
Run Code Online (Sandbox Code Playgroud)
这就是我得到的
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/pymongo-2.0.1_-py2.7-linux i686.egg/pymongo/connection.py", line 348, in __init__
self.__find_node()
File "/usr/local/lib/python2.7/dist-packages/pymongo-2.0.1_-py2.7-linux- i686.egg/pymongo/connection.py", line 627, in __find_node
raise AutoReconnect(', '.join(errors))
pymongo.errors.AutoReconnect: could not connect to localhost:27017: [Errno 111] Connection refused
Run Code Online (Sandbox Code Playgroud)
我该如何解决?
我正在做一个简单的插入Mongo ...
db.notes.insert({ title: "title", details: "note details"})
Run Code Online (Sandbox Code Playgroud)
插入便笺文档后,我需要立即获取对象ID.从插入返回的结果有一些关于连接和错误的基本信息,但没有文档和字段信息.
我发现了一些关于使用upsert = true的update()函数的信息,我只是不确定这是否是正确的方法,我还没有尝试过.
在这里理解正确的方法有些困难.
我有一个与三个成员(标准主从奴隶)的mongodb副本集的连接.当主人保持一致时,一切都正常.
pymongo.Connection(['host1:27017','host2:27018','host3:27019']).database_test
Run Code Online (Sandbox Code Playgroud)
出于某种原因,当副本集主要降低时,这会开始抛出一个自动连接异常,即使在选择了新的主节点之后该异常也不会消失.
现在我知道需要捕获和处理这个异常,最有可能是等待新的主要选举.我遇到的问题似乎是,一旦选择了新的小学,它根本就不在乎.这个"主人已经改变"的例外情况不断涌现.
打印连接__dict__显示所有三个主机.
我已经尝试将replicasetkwarg 传递给连接,但这是一个意想不到的争论.
有没有理由说这种连接不会只是开始查询新的主要?
编辑:
现在显然在部署服务器上也出现了同样的问题.如果主服务器完全更改,则抛出自动连接异常,即使在选择新的主服务器之后也不会消失.
Pymongo是2.2版和mongodb版2.0.2.更改pymongo代码(mongouri与主机列表)中定义连接的方式无效.恢复服务的唯一方法是rs.stepDown()其他主机,直到原始主服务器再次成为主服务器.
我正在使用Flask和MongoDB.我试图将request.form的内容转换为适合通过PyMongo保存的内容.似乎应该经常出现一些现成的解决方案.
那么Flask给我的是:
ImmutableMultiDict([('default', u''), ('required': u'on'), ('name', u'short_text'), ('name', u'another'), ('submit', u'Submit')])
Run Code Online (Sandbox Code Playgroud)
而我希望得到的是接近这一点:
{
'default': '',
'name': ['short_text', 'another'],
'required': true
}
Run Code Online (Sandbox Code Playgroud) Pymongo用它返回一个游标我可以迭代结果并将它们的文档附加到列表中.有没有办法直接将结果文档放入列表中?谢谢
特别是,我目前正在尝试使用以下函数检查与客户端的连接是否有效:
def mongodb_connect(client_uri):
try:
return pymongo.MongoClient(client_uri)
except pymongo.errors.ConnectionFailure:
print "Failed to connect to server {}".format(client_uri)
Run Code Online (Sandbox Code Playgroud)
然后我像这样使用这个函数:
def bucket_summary(self):
client_uri = "some_client_uri"
client = mongodb_connect(client_uri)
db = client[tenant_id]
ttb = db.timebucket.count() # If I use an invalid URI it hangs here
Run Code Online (Sandbox Code Playgroud)
如果给出了无效的URI,有没有办法在最后一行捕获并抛出异常?我最初认为这就是ConnectionFailure的用途(因此连接时可能会被捕获)但我错了.
如果我使用无效的URI运行程序,该程序无法运行,则发出KeyboardInterrupt会产生:
File "reportjob_status.py", line 58, in <module>
tester.summarize_timebuckets()
File "reportjob_status.py", line 43, in summarize_timebuckets
ttb = db.timebucket.count() #error
File "/Library/Python/2.7/site-packages/pymongo/collection.py", line 1023, in count
return self._count(cmd)
File "/Library/Python/2.7/site-packages/pymongo/collection.py", line 985, in _count
with self._socket_for_reads() as (sock_info, slave_ok):
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/contextlib.py", …Run Code Online (Sandbox Code Playgroud) 我有一个mongo'_id'列表,我想删除它.目前我正在这样做
# inactive_users --> list of inactive users
for item in inactive_users:
db.users.remove({'_id' : item})
Run Code Online (Sandbox Code Playgroud)
但我的问题是列表太大了......(它可能会超过100,000+).因此查询列表中的每个项目只会增加服务器上的负载.他们是一种在mongo查询中传递整个列表的方法,这样我就不必一次又一次地触发查询.
谢谢