-1

探索 python 和 mongo 并不能理清我在下面做错了什么

如何将变量传递给 find_one() 记录?

下面的代码有效,但在 find_one() 中硬编码了 id 值,因此没有任何价值,但证明连接代码和函数有效

from pymongo import MongoClient

#connect to mongo database hosted on dedicated mongo server
#the script expects the host name to be in  /etc/hosts file


#Set up global variables here

mongo_server = "mongo_api"
mongo_port = "27017"
mongo_user = "admin"
mongo_passwd = ":mypassword@"
connect_string = "mongodb://"+ mongo_user 
                             + mongo_passwd 
                             + mongo_server 
                             + ":" 
                             + mongo_port


def get_page(page_no):
    connection = MongoClient(connect_string)    # equal to > show dbs
    db = connection.test_database # equal to > use test_database                
    pages = db.pages
    my_page = pages.find_one({"id": 2})  <----  VALUE HARD CODED WORKS
    return (my_page)

print get_page(1)

下面的代码失败或返回 NONE 我找不到将函数参数 page_no 传递给 find_one() 函数以拉回记录的方法

我试图将 page_no 转换为字符串等,但无济于事。
在下面的代码片段中,我包含了一些变体,我试图将页码的值传递给 find_one() 请求,但无济于事。

def get_page(page_no):
    index_val = str(page_no)
    connection = MongoClient(connect_string)    # equal to > show dbs
    db = connection.test_database # equal to > use test_database                
    pages = db.pages
    # NONE OF THESE VARIANTS WORK OTHERS I HAVE TRIED
    my_page = pages.find_one({"id": page_no})  <-- TRYING TO USE PARAMETER FAILS
    my_page = pages.find_one({"id": str(page_no)})
    my_page = pages.find_one({"id": index_val})

    return (my_page)

print get_page(1)

我要么收到错误,要么收到 NONE

顺便说一句,上面的密码不是我的真实密码,我想我会把连接字符串留给其他人看看我是怎么做到的。

任何帮助表示赞赏。

谢谢

4

1 回答 1

0

问题已解决,并认为我会为其他人发帖。我可能混淆了包括我自己在内的人,很明显我添加了自己的主键并将其命名为id,这是在 mongo 提供的索引字段(称为 _id )之外的,您可以看到它可能会变得混乱。

显然,用与 mongo 提供的名称相同的名称来命名您自己的内部主键并不是一个好主意。

最后,这是由两个问题引起的,一个是架构问题,对问题的读者来说并不明显,另一个是需要将参数转换为 int

from pymongo import MongoClient

#connect to mongo database hosted on dedicated mongo server
#the script expects the mongo_server host name to be in  /etc/hosts file


#Set up global variables here

mongo_server = "mongo_api"
mongo_port = "27017"
mongo_user = "admin"
mongo_passwd = ":mypassword@"
connect_string = "mongodb://"+ mongo_user 
                             + mongo_passwd 
                             + mongo_server 
                             + ":" 
                             + mongo_port
# the above connect_string looks like
# mongodb://admin:mypassword@mongo_api:27017
# when formed


    def get_page(page_no):
    connection = MongoClient(connect_string)    # equal to > show dbs
    db = connection.test_database # equal to > use test_database                
    pages = db.pages
    my_page = pages.find_one({"id": int(page_no)})  <---- change to INT   
    return (my_page)


print get_page(1)

感谢那些回复的人。

于 2013-11-10T16:23:23.840 回答