I get this error TypeError: filter must be an instance of dict, bson.son.SON, or other type that inherits from collections.Mapping
I get this error TypeError: filter must be an instance of dict, bson.son.SON, or other type that inherits from collections.Mapping
我正在将上次保存的数据检索到文本字段,以便用户可以继续他们之前的工作,此命令在 mongo 控制台中运行良好,在 PyCharm 中我无法理解找出编写 find() 查询的正确方法
我尝试按照此处的建议将过滤器参数存储在 2 个单独的变量中 pymongo error: filter must be an instance of dict, bson.son.SON, or other type that inherits from collections.Mapping
Database.initialize()
db_data = Database.find(collection = 'notes_temp',
query = ({"priority" : self.priority}, {'td': 1, '_id':0}))
for task in db_data:
self.t.insert('insert linestart', task)
数据库模块
class Database:
URI = "mongodb://127.0.0.1:27017"
DATABASE = None
@staticmethod
def initialize():
client = pymongo.MongoClient(Database.URI)
Database.DATABASE = client['notes']
@staticmethod
def find(collection, query):
return Database.DATABASE[collection].find(query)
问题是您的查询定义为:
({"priority" : self.priority}, {'td': 1, '_id':0}))
所以当你的函数将它作为输入时,它被解析为:
return Database.DATABASE[collection].find(({"priority" : self.priority}, {'td': 1, '_id':0})))
基本上应该删除一对额外的括号。
一个模拟解决方案:(显然有几种方法可以处理这个问题)
Database.initialize()
db_data = Database.find(collection = 'notes_temp',
query = {"priority" : self.priority}, projection = {'td': 1, '_id':0})
for task in db_data:
self.t.insert('insert linestart', task)
class Database:
URI = "mongodb://127.0.0.1:27017"
DATABASE = None
@staticmethod
def initialize():
client = pymongo.MongoClient(Database.URI)
Database.DATABASE = client['notes']
@staticmethod
def find(collection, query, projection):
return Database.DATABASE[collection].find(query, projection)
我正在将上次保存的数据检索到文本字段,以便用户可以继续他们之前的工作,此命令在 mongo 控制台中运行良好,在 PyCharm 中我无法理解找出编写 find() 查询的正确方法
我尝试按照此处的建议将过滤器参数存储在 2 个单独的变量中 pymongo error: filter must be an instance of dict, bson.son.SON, or other type that inherits from collections.Mapping
Database.initialize()
db_data = Database.find(collection = 'notes_temp',
query = ({"priority" : self.priority}, {'td': 1, '_id':0}))
for task in db_data:
self.t.insert('insert linestart', task)
数据库模块
class Database:
URI = "mongodb://127.0.0.1:27017"
DATABASE = None
@staticmethod
def initialize():
client = pymongo.MongoClient(Database.URI)
Database.DATABASE = client['notes']
@staticmethod
def find(collection, query):
return Database.DATABASE[collection].find(query)
问题是您的查询定义为:
({"priority" : self.priority}, {'td': 1, '_id':0}))
所以当你的函数将它作为输入时,它被解析为:
return Database.DATABASE[collection].find(({"priority" : self.priority}, {'td': 1, '_id':0})))
基本上应该删除一对额外的括号。
一个模拟解决方案:(显然有几种方法可以处理这个问题)
Database.initialize()
db_data = Database.find(collection = 'notes_temp',
query = {"priority" : self.priority}, projection = {'td': 1, '_id':0})
for task in db_data:
self.t.insert('insert linestart', task)
class Database:
URI = "mongodb://127.0.0.1:27017"
DATABASE = None
@staticmethod
def initialize():
client = pymongo.MongoClient(Database.URI)
Database.DATABASE = client['notes']
@staticmethod
def find(collection, query, projection):
return Database.DATABASE[collection].find(query, projection)