我有一个包含一堆用户引用的数组。我正在尝试查找用户所在的所有游戏。这样做似乎很简单。 Game
集合包含一个数组Players以及对用户的引用。
def list_games(user):
return db.collection(u'Game').where("Players","array_contains",user)
for row in db.collection(u'User').get():
user=row
list_games(user)
当我尝试这个简单的代码时,我在下面包含的list_games的一行中遇到错误。 (已删除了一些路径信息,但其他方面则保持不变)
Traceback (most recent call last):
File "listGames.py", line 29, in <module>
for game in list_games(user).get():
File "listGames.py", line 14, in list_games
return db.collection(u'Game').where("Players","array_contains",user)
File "C:\Users\...\AppData\Local\Programs\Python\Python37\lib\site-packages\google\cloud\firestore_v1beta1\collection.py", line 222, in where
return query.where(field_path, op_string, value)
File "C:\Users\...\AppData\Local\Programs\Python\Python37\lib\site-packages\google\cloud\firestore_v1beta1\query.py", line 265, in where
value=_helpers.encode_value(value),
File "C:\Users\...\AppData\Local\Programs\Python\Python37\lib\site-pakages\google\cloud\firestore_v1beta1\_helpers.py", line 200, in encode_value
"Cannot convert to a Firestore Value", value, "Invalid type", type(value)
TypeError: ('Cannot convert to a Firestore Value', <google.cloud.firestore_v1beta1.document.DocumentSnapshot object at 0x000000000454D668>, 'Invalid type', <class 'google.cloud.firestore_v1beta1.document.DocumentSnapshot'>)
在我看来,我应该为用户做一些不同的事情,例如user.id
,但我无法弄清楚。我需要怎么做才能在数组中搜索引用?谢谢!
答案 0 :(得分:0)
user
是DocumentSnapshot,因此您应该这样处理。也许您想与to_dict()
一起convert it to a dict。
答案 1 :(得分:0)
正确的做法是比较.reference
,如下所示。
def list_games(user):
return db.collection(u'Game').where("Players","array_contains",user.reference)