我已经安装了mongodb并启用了auth.以及它的工作发现.我可以使用robomongo应用程序从远程笔记本连接它:

Host: SERVER_IP
PORT: 27017
DATEBASE: prod-db
USERNAME: user_name
PASS: user_password
Auth Mechanism: MONGODB-CR

我们可以通过以下方式从服务器shell 本地连接:

$ mongo prod-db -u user_name -p user_password

一切都很好,但当我们使用pymongo api进行try 时.身份验证失败.下面是python代码:

from pymongo import MongoClient

client = MongoClient()
client.prod_db.authenticate('user_name', 'user_password', mechanism='MONGODB-CR')
db = client.prod_db
result = db.users.find()

for document in result:
    print(document)

使用的工具:

python 2.7
pymongo versiob 3.3.1
MongoDB shell version: 2.6.10
$ mongod --version
db version v2.6.10
2016-10-31T16:34:59.868+0000 git version: nogitversion
2016-10-31T16:34:59.868+0000 OpenSSL version: OpenSSL 1.0.2g  1 Mar 2016

错误跟踪:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/pymongo/database.py", line 1018, in authenticate
    connect=True)
  File "/usr/local/lib/python2.7/dist-packages/pymongo/mongo_client.py", line 444, in _cache_credentials
    sock_info.authenticate(credentials)
  File "/usr/local/lib/python2.7/dist-packages/pymongo/pool.py", line 343, in authenticate
    auth.authenticate(credentials, self)
  File "/usr/local/lib/python2.7/dist-packages/pymongo/auth.py", line 464, in authenticate
    auth_func(credentials, sock_info)
  File "/usr/local/lib/python2.7/dist-packages/pymongo/auth.py", line 439, in _authenticate_mongo_cr
    sock_info.command(source, query)
  File "/usr/local/lib/python2.7/dist-packages/pymongo/pool.py", line 239, in command
    read_concern)
  File "/usr/local/lib/python2.7/dist-packages/pymongo/network.py", line 102, in command
    helpers._check_command_response(response_doc, None, allowable_errors)
  File "/usr/local/lib/python2.7/dist-packages/pymongo/helpers.py", line 205, in _check_command_response
    raise OperationFailure(msg % errmsg, code, response)

Solution:

from pymongo import MongoClient

client = MongoClient('mongodb://user_name:user_password@localhost:27017/prod-db')
db = client['prod-db']

result = db.users.find()
for document in result:
    print document

推荐答案

请try 以下方式:

client = MongoClient("mongodb://user_name:user_password@SERVER_IP/prod-db")
db = client['prod-db']

Mongodb相关问答推荐

如何限制/筛选子文档中的条目?

在MogoDB中按时间间隔分组、统计文档和获取间隔时间

在提供的文档(_Id)之后和之前,是否有一个Mongo操作来获取已排序(和/或过滤)集合中的文档计数?

如何通过 Go 以 UUID 类型保存 Mongo 中的内容?

DTO 验证适用于 POST,但不适用于 PUT

仅当特定字段存在于 MongoDB 中时才更新它

无法连接到mongolab主机

如何在 MongoDB 集合中查找与给定条件匹配的文档和单个子文档

MongoDB插入引发重复键错误

Node.js MongoDB Upsert 更新

Mongoose 中不同集合的相同模式

如何在array.NET驱动程序中的元素属性上创建MongoDB MultiKey索引

如何解决 ClassNotFoundException:com.mongodb.connection.BufferProvider?

Mongoose 连接认证失败

有没有办法自动更新 MongoDB 中的两个集合?

直接从 URL 查询字符串提供的 mongo 查询有多危险?

mongo - Ruby连接问题

为什么我新创建的 mongodb 本地数据库增长到 24GB?

Mongoose 版本控制:when is it safe to disable it?

在mongoose中查询虚拟属性