我认为这个问题是正确的,但仍然是个错误。
findQ = {"fromid": wordid}, {"toid":1}
res= self.db.wordhidden.find(findQ)
然而,找到一个(findQ)的作品。所以我找不到错的地方。 我使用python 3.6和pymongo。 这是我的代码:
def getallhiddenids(self,wordids,urlids):
l1={}
for wordid in wordids:
findQ = {"fromid": wordid}, {"toid":1}
res= self.db.wordhidden.find(findQ)
for row in res: l1[row[0]]=1
for urlid in urlids:
findQ = {"toid": urlid}, {"fromid":1}
res= self.db.hiddenurl.find(findQ)
这是一个错误:
Traceback (most recent call last):
File "C:\Users\green\Desktop\example.py", line 9, in <module>
neuralnet.trainquery([online], possible, notspam)
File "C:\Users\green\Desktop\nn.py", line 177, in trainquery
self.setupnetwork(wordids,urlids)
File "C:\Users\green\Desktop\nn.py", line 105, in setupnetwork
self.hiddenids=self.getallhiddenids(wordids,urlids)
File "C:\Users\green\Desktop\nn.py", line 93, in getallhiddenids
res= self.db.wordhidden.find(findQ)
File "C:\Users\green\AppData\Local\Programs\Python\Python36-32\lib\site-
packages\pymongo\collection.py", line 1279, in find
return Cursor(self, *args, **kwargs)
File "C:\Users\green\AppData\Local\Programs\Python\Python36-32\lib\site-
packages\pymongo\cursor.py", line 128, in __init__
validate_is_mapping("filter", spec)
File "C:\Users\green\AppData\Local\Programs\Python\Python36-32\lib\site-
packages\pymongo\common.py", line 400, in validate_is_mapping
"collections.Mapping" % (option,))
TypeError: filter must be an instance of dict, bson.son.SON, or other type
that inherits from collections.Mapping
错误是因为PyMongo find()需要字典或bson.son对象。您传入的是一个Python元组对象,其形式是
({"fromid": wordid}, {"toid":1})
。您可以通过如下调用find()
方法来更正此问题:从技术上讲,调用find_one()也不起作用。只是参数过滤器被
find_one()
更改了。见find_one() L1006-1008。基本上将元组过滤器格式化为:上面的代码不会(不应该)返回集合中的任何匹配项。
除了要执行的操作外,还可以将filter参数存储到两个变量中,例如:
相关问题 更多 >
编程相关推荐