【问题标题】:GAE-NDB: how prevent projection changed the resultsGAE-NDB:如何防止投影改变结果
【发布时间】:2012-08-24 08:09:22
【问题描述】:

我使用了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?

谢谢

【问题讨论】:

  • 对不起,蒂姆霍夫曼错了。下面的答案是正确的。
  • 已删除我的评论,不希望任何人被误导。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 2016-08-19
    • 2019-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多