Google app engine 过滤两个属性与过滤一个计算属性?数据存储谷歌应用引擎

Google app engine 过滤两个属性与过滤一个计算属性?数据存储谷歌应用引擎,google-app-engine,google-cloud-datastore,app-engine-ndb,Google App Engine,Google Cloud Datastore,App Engine Ndb,我想构建一个聊天应用程序,这是我的模型: class Message(ndb.Model): senderId = ndb.IntegerProperty() receiverId = ndb.IntegerProperty() sender_receiver = ndb.ComputedProperty(lambda self: self.senderId.join('-').join(self.receiverId)) message = ndb.StringProperty

我想构建一个聊天应用程序,这是我的模型:

class Message(ndb.Model):
  senderId = ndb.IntegerProperty()
  receiverId = ndb.IntegerProperty()
  sender_receiver = ndb.ComputedProperty(lambda self: self.senderId.join('-').join(self.receiverId))
  message = ndb.StringProperty()
  date = ndb.DateTimeProperty(auto_now_add=True)
因此,如果我想用以下值获取发送给userId1和userId2的消息:userId1=7878,userId2=5264。 我将运行以下查询:

qry = Message.query(Message.sender_receiver.IN('7878-5264','5264-7878'));
但没有计算属性:

qry = Message.query(Message.sender.IN(7878,5264) AND Message.receiver.IN(7878,5264));
哪一个更好?

在我脑海中(按照Dmitry所说的),In是一个昂贵且缓慢的操作,因为它创建多个查询,然后加入结果

我会使用computed属性,但我甚至不会在其中使用IN

我愿意

 qry = Message.query(Message.sender_receiver = '7878-5264' OR Message.sender_receiver = '5264-7878');
执行保存操作时,computed属性将花费您更多的时间,但通常情况下,保存时会花费更多的时间,以便更快地检索。

使用repeated属性

sender_receiver = ndb.ComputedProperty(lambda self: [self.senderId, self.receiverId], repeated=True)

qry = Message.query()
qry = qry.filter(Message.sender_receiver == 7878)
qry = qry.filter(Message.sender_receiver == 5264)
# you will get all values where sender or receiver in 7878 or 5264 with a single query

@PaulCollingwood谢谢我会用它:)IN是一个昂贵的操作,最好不要用它。@DmitrySadovnychyi那么你有什么建议吗?谢谢你的回复,但我认为IN和OR之间没有区别,对吗@大卫完全正确,忘了那件事是的,我认为德米特里的重复属性应该起作用