2012-08-08 60 views
2

在它说,没有办法来查询实体不包括等于给定值的标记的文档:https://developers.google.com/appengine/docs/python/ndb/queries#neq_and_inGAE NDB查询=标签

我有一个实体的集合,每个实体都有一组标签。我需要找到那些没有特定标签的实体。是否有任何ndb查询限制的解决方法?

+0

如果您的标记集很小,或者您希望对您的“WITHOUT”查询执行的标记集较小,请添加“not_tags”属性(如果使用ndb,则为list属性或“repeated = True”)到实体。这将包含您的标记属性的逆,或适当的WITHOUT子集。正如Peter在下面提到的那样,您将有一个可以查询的索引。如果你的标签集很大,这可能不起作用。 – 2012-08-08 14:39:53

回答

2

每次创建/更新实体时,都会根据其属性的值更新索引。

如果一个属性不存在或者列表属性不包含值(=标记在您的案例中),那么在索引中没有它的条目。由于查询依赖于索引来查找内容,因此它不会被找到。

这不是NDB查询限制,而是GAE数据存储限制,这意味着所有访问它的API都具有此限制(Java/Python/Go,低级API等)。

AFAIK,没有直接的解决方法。您可以通过获取所有文章并在代码中检查缺少标签的代码来对其进行编码,但根据文章数量而定,这可能很昂贵。

您可能想要创建一个新问题并从应用程序角度详细描述问题:您尝试实现的最终结果是什么?