如何在NDB中查询新创建的属性?

时间:2017-07-30 11:10:21

标签: google-app-engine app-engine-ndb

我之前有过NDB类,刚刚添加了新属性receive_news

class User(ndb.Model):
    '''
    Index
        Key: user_id
    '''
    lang = ndb.StringProperty(required=None, indexed=True)
    receive_news = ndb.BooleanProperty(required=None, indexed=True)

我想获得想要接收我的新闻的用户列表(目前所有用户)。我尝试了以下选项:

keys = User.query(User.receive_news != True).fetch(keys_only=True)
keys = User.query(User.receive_news == None).fetch(keys_only=True)

两者都返回0.我应该如何正确使用这个新属性?

1 个答案:

答案 0 :(得分:0)

数据存储区索引仅在将实体写入数据存储区时更新,因此只有在创建新索引后写入的实体才会添加到其中。

要将预先存在的实体添加到索引中(以便查询可以找到它们),您必须先获取然后重新编写它们。也许在这些方面使用某些东西(如果它们太多,你必须将它分成不同的请求/任务)

keys = []
for user in ndb.get_multi(User.query().fetch(keys_only=True)):
    if  user.receive_news is None:
        user.receive_news = True
        keys.append(user.key)
ndb.put_multi(keys)