GAE-NDB:如何防止投影改变结果

时间:2012-08-24 08:09:23

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

我使用了ndb projection,但它确实改变了结果,结果如何不受投影的影响?

class T(ndb.Model):
  name = ndb.StringProperty()  
  name2 = ndb.StringProperty(repeated=True)

  @classmethod
  def test(cls):
    for i in range(0, 10):
      t = T(name=str(i))
      if i%2 == 0:
        t.name2=["zzz"]      
      t.put()

    qr = T.query()
    qo = ndb.QueryOptions(projection=['name', 'name2'])
    items, cursor, more = qr.fetch_page(20, options=qo)
    print len(items)

    qo = ndb.QueryOptions(projection=['name'])
    items, cursor, more = qr.fetch_page(20, options=qo)
    print len(items)

结果是5,10

如何使结果是10,10?

由于

1 个答案:

答案 0 :(得分:5)

空list-property(repeated = True)不会被索引,因为它是投影查询用于返回结果的索引,所以不会返回没有属性值的实体。 您的测试用例 易受Tim的评论提及的最终一致性的影响,但这不是唯一的问题。