GAE查找项目不在ListProperty中的实体

2024-05-16 16:00:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个小应用程序,我在用户之间传递消息。我的信息模型是这样的

class Message(db.Model):
    from = db.UserProperty()
    sent_to_users = db.ListProperty(db.Key)

如果用户在线,我会将消息发送给他们,因此当我检测到用户在线时,我会发送任何尚未发送给他们的消息。我在/chat/presence/available handler中做message.sent_to_users.append(user)。指示消息已发送到user

我的问题是如何过滤出已经发送给用户的消息。根据inequality filter in queries一节,!=转换为大于和小于两个查询,然后将结果合并。不用说,在一个键列表的情况下不起作用。基本上members_not_sent_message = Message.all().filter('sent_to_users !=', available_user).fetch(100)不起作用。在

有没有一种方法可以找到ListProperty中没有的值,或者我必须遍历每个项并找到尚未发送的消息?或者,对于这样一个系统,有没有其他的设计可以绕过GAE数据存储的限制(如果在这种情况下有这样的限制)?在


Tags: to用户消息messagedb情况filterusers
3条回答

正如其他人所指出的,您不能执行此查询。但是,您不应该使用ListProperty来跟踪任何可以无限增长的内容,例如未读消息,因为ListProperty的大小有严格的限制。相反,您应该在消息本身上有一个标志,指示它们是否已被发送/读取。在

列表属性上的不等式过滤器不起作用。如您所知,不等式过滤器在幕后运行单独的“小于值”和“大于值”查询,然后将结果连接起来。具有多个值的列表属性在同一个索引中会有多个命中,因此,如果过滤掉一个项,则始终会匹配另一个项。在

考虑保留两个列表:除了sent列表之外,保留一个not_sent列表,并查询该列表。在

你试过这个吗?在

相关问题 更多 >