사용자간에 메시지를 전달하는 애플리케이션이 있습니다. 메시지에 대한 나의 모델은 온라인 있다면 사용자에게 메시지를 보내이GAE는 ListProperty에없는 항목이있는 엔티티를 찾습니다.
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 데이터 저장소 제한을 우회하는 이와 같은 시스템을위한 또 다른 설계가 있습니까 (이 경우 하나가있는 경우)?
아니요, 이렇게하는 좋은 방법은 없습니다. ListProperty의 각 항목은 별도로 인덱싱됩니다. – geoffspear
이것을 구현하는 경우 사용자가 배달하지 않은 메시지를 저장합니다. 저장 용량은 늘어날 수 있지만 코드를 훨씬 더 깨끗하게 만들 것입니다. –