Google app engine GAE-NDB:预防投影如何改变结果
我用过,但它确实改变了结果,结果如何不受投影的影响Google app engine GAE-NDB:预防投影如何改变结果,google-app-engine,app-engine-ndb,Google App Engine,App Engine Ndb,我用过,但它确实改变了结果,结果如何不受投影的影响 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"]
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
感谢空列表属性(repeated=True)不会被索引,因为投影查询使用该索引返回结果,因此不会返回没有属性值的实体。
您的测试用例可能会受到Tim评论中提到的最终一致性的影响,但这不是唯一的问题。空列表属性(repeated=True)不会被索引,并且由于投影查询使用该索引返回结果,因此不会返回没有属性值的实体。
您的测试用例容易受到Tim评论中提到的最终一致性的影响,但这不是唯一的问题。对不起,Tim Hoffman错了。下面的答案是正确的。我已经删除了我的评论,不希望任何人被误导。对不起,蒂姆·霍夫曼错了。下面的答案是正确的。我已经删除了我的评论,不希望任何人被误导。