【问题标题】:Get a document with find_one (pymongo)使用 find_one (pymongo) 获取文档
【发布时间】:2016-11-07 01:02:17
【问题描述】:

我有一个这样的文档结构:

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

_id 包含一个我想用 pymongo 的 find_one 函数获得的 IP 地址。 我这样称呼它:

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

它返回的只是“none”,因为它没有找到文档。有什么想法吗?

编辑: 我也试着这样称呼它:

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

更多信息: 我在 docker 容器中运行了一个名为“vpn_service”的数据库。 该集合也被命名为“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 个版本的连接代码的结果: > Collection(Database(MongoClient('localhost', 27017), u'vpn_service'), u'posts') > Collection(Database( MongoClient('localhost', 27017), u'vpn_service'), u'vpn_service.posts') 这意味着第二个是错误的,因为您查询的是 'vpn_service' 数据库中的 'vpn_service.posts' 集合,而不是 'posts ' 集合

标签: python mongodb pymongo bottle


【解决方案1】:

这意味着它找不到文档。

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

同时测试你的 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')

【讨论】:

  • 肯定有一个带有这个_id的文档,我从集合中复制了它。我还用 str(ip) 确定它是一个字符串。结果仍然是“无”。
  • 尝试更多测试,使用查找功能,获取所有文档。我们需要更多细节。从您在此处显示的内容来看,这些文件不存在。在 mongo shell 中测试,添加一个带有虚拟 IP 的虚拟文档并搜索它。
  • 或者你的代码一定有问题。您是否在 mongo shell 中测试过相同的查询?
  • 这可能是连接的问题,因为我什至找不到没有 _id 的任何东西(请参阅我的编辑)
  • 请使用我的脚本测试您的连接。
【解决方案2】:

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

【讨论】:

  • 谢谢你的回答,我已经试过了:return (self.posts.find_one({"_id": str(ip)})) 结果还是没有
  • str 在 mongo 查询中不起作用,请在 mongo 查询之前尝试转换。
  • 还是不行。这可能是连接的问题,因为我什至找不到没有 _id 的任何东西(请参阅我的编辑)
猜你喜欢
  • 2023-02-10
  • 1970-01-01
  • 2018-09-27
  • 2018-11-21
  • 2016-10-22
  • 1970-01-01
  • 2021-06-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多