Ndb 默认顺序不保留插入顺序

Ndb default order does not preserve insertion order

我在一个项目中使用了 GAE 和 NDB。我只是注意到,如果我创建多个对象,然后检索这些对象的列表,则顺序不会保留(我在对象上使用 fetch())。

这是管理页面的截图,显示了同样的问题:

因为你可能(如果太小here就是link)看我有几个sessions。现在,我按顺序创建了名称为 day 的会话,从 0 到 7。

但是如您所见,订单并未保留。

我检查了一下,实际上 keys 不是增量的。 id (id 应该是递增的吧?不过反正有些classes,不是这个,我用的是手工钥匙,所以不会有id).

有没有办法保留插入顺序? (或者这只是一种奇怪的行为?还是我的错?)

PS:如果你想看一下代码:this is the session model which extends this class 我做了

除非您执行将按特定顺序检索的查询,否则不会保留该顺序。

是什么让您认为应该订购它们?

keysidndb 中都不是严格递增的(并且递增 1)。您可以设置自己的 ids 并确保它们正确地自动递增。

或者您可以在模型中添加 DateTimeProperty:

created = ndb.DateTimeProperty(auto_now_add=True)

在您看来,您可以使用过滤器按插入日期对实体进行排序,例如:

posts = Post.query().order(-Post.created).fetch()

这将按插入日期的降序排序和获取您的(比方说)Post 实体。