我正在尝试使用python 3.6.5,pymongo 3.7.1和
建立一个简单的博客。我能够成功地将博客文章添加到集合中,并且当我运行命令db.posts.find({}).pretty()
时,我会得到正确的结果,即posts
集合中有两个条目。但是,当我尝试使用下面定义的功能检索由post_id
指定的博客帖子时,得到的结果为None
以下是我的database.py
文件,在其中初始化数据库并编写插入和检索方法
import pymongo
class Database(object):
URI = "mongodb://127.0.0.1:27017"
DATABASE = None
@staticmethod
def initialise():
## get the client with Database.URI
client = pymongo.MongoClient(Database.URI)
## get the database that we are using
Database.DATABASE = client["fullstack"]
@staticmethod
def insert(collection, data):
## get me the collection in this database and insert some data into it
Database.DATABASE[collection].insert(data)
@staticmethod
def find(collection, query):
Database.DATABASE[collection].find(query) # returns a cursor.cursor object
@staticmethod
def find_one(collection, query):
Database.DATABASE[collection].find_one(query)
以下是我的posts.py
文件,其中包含具有指定集合名称的插入和检索功能
from database import Database
import uuid
class Post(object):
def __init__(self, blog_id, title, post_id=None):
self.content = content
self.author = author
self.blogId = blog_id
self.postId = uuid.uuid4().hex if post_id is None else post_id
self.date = date
def save_to_mongo(self):
Database.insert(collection="posts",
data= self.json())
def json(self):
return {
"blogId": self.blogId,
"postId": self.postId,
"title": self.title,
"content": self.content
}
@staticmethod
def from_blog(id):
return [post for post in Database.find(collection="posts", query={"blogId": id})]
app.py文件,我在其中调用上面定义的功能:
import pymongo
from database import Database
from models.posts import Post
Database.initialise()
post1 = Post(
blog_id = "123",
title = "blog title",
content = "sample content",
author = "Jose"
)
post1.save_to_mongo() # successfully add posts
post = Post.from_mongo('7338d2ab285e4073b81e57afbad416f2')
print(post) # returns none, but there is an entry with that postId
print(Database.DATABASE["posts"].find({"blogId": "123"})) # returns desired result i.e a cursor.curso object
print(Database.DATABASE["posts"].find_one({"postId": "7338d2ab285e4073b81e57afbad416f2"})) # returns desired result, the item with the postId specified
我在这里做什么错了?