使用find_one获取文档(pymongo)

时间:2016-07-05 08:59:54

标签: python mongodb pymongo bottle

我得到了这样的文档结构:

{
    "_id": "106.xxx.xxx.xxx",
    "maxAge": 48,
    "origin": "some_origin",
    "time": "2016-07-04 11:41:47"
}

_id包含一个IP-Adress,我想用pymongo的find_one函数获取。 我这样称呼它:

return (self.posts.find_one({"_id": ip}))

它返回的全部是"无"因为它没有找到该文件。任何想法?

编辑: 我也试着称之为:

return (self.posts.find_one({"_id": str(ip)}))

更多信息: 我有一个名为" vpn_service"的数据库。在docker容器中运行。 该集合名为" vpn_service"。

首先我试图像这样启动Mongoclient:

def __init__(self, host, port):
    self.client = MongoClient(host=host, port=port)
    self.db = self.client.vpn_service
    self.posts = self.db.posts

我也试过这个:

def __init__(self, host, port):
    self.client = MongoClient(host=host, port=port)
    self.db = self.client.vpn_service
    self.collection = self.db.vpn_service
    self.posts = self.collection.posts

因为只有posts.find_one()找不到任何内容,否则它可能是连接问题。

2 个答案:

答案 0 :(得分:0)

检查ip是否为string类型。这可能会在搜索过程中产生问题。如果不尝试将其类型化为字符串。

答案 1 :(得分:0)

这意味着它无法找到该文件。

确保文档存在,并且您正在查询正确的类型 - 字符串。

还要测试你的pymongo连接(用你的值改变我的价值观):

from pymongo import MongoClient
client = MongoClient('localhost')
db_name = 'test_db'
db = client[db_name]
collection_name = 'test_collection'
collection = db[collection_name]
print collection

打印结果:

  

收藏(数据库(MongoClient('localhost',27017),u'test_db'),u'test_collection')