回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有一个小应用程序,我在用户之间传递消息。我的信息模型是这样的</p>
<pre><code>class Message(db.Model):
from = db.UserProperty()
sent_to_users = db.ListProperty(db.Key)
</code></pre>
<p>如果用户在线,我会将消息发送给他们,因此当我检测到用户在线时,我会发送任何尚未发送给他们的消息。我在<a href="http://code.google.com/appengine/docs/python/xmpp/overview.html#Handling_User_Presence" rel="nofollow">/chat/presence/available handler</a>中做<code>message.sent_to_users.append(user)</code>。指示消息已发送到<code>user</code></p>
<p>我的问题是如何过滤出已经发送给用户的消息。根据<a href="http://code.google.com/appengine/docs/python/datastore/queries.html#Overview" rel="nofollow">inequality filter in queries</a>一节,<code>!=</code>转换为大于和小于两个查询,然后将结果合并。不用说,在一个键列表的情况下不起作用。基本上<code>members_not_sent_message = Message.all().filter('sent_to_users !=', available_user).fetch(100)</code>不起作用。在</p>
<p>有没有一种方法可以找到ListProperty中没有的值,或者我必须遍历每个项并找到尚未发送的消息?或者,对于这样一个系统,有没有其他的设计可以绕过GAE数据存储的限制(如果在这种情况下有这样的限制)?在</p>