如何使用对象数组过滤google数据存储区实体

时间:2018-04-07 07:52:08

标签: nosql google-cloud-datastore

给定一个数据存储区实体结构,其中一列(日期)包含一个对象数组:

[{date: 2018-01-01T00:00:00Z, otherProps:x }, {date: 2018-01-02T00:00:00Z, otherProps: x}, {date: 2017-12-31T00:00:00Z, otherProps: x}]

是否可以在实体日期数组中的最早日期构建复杂索引和查询。

例如,我想选择最早日期早于某个日期的所有实体......这是我第一次涉足NoSQL,如果这很明显就道歉!

2 个答案:

答案 0 :(得分:1)

这可能很棘手,因为查询排序和过滤通常基于属性值,在您的情况下,值将是整个日期数组,而不仅仅是其中的日期值。

根据您使用的实际客户端库,可能。例如,请参阅ndb客户端库提供的Structured PropertiesFiltering for Structured Property Values

就我个人而言,我宁愿为每个日期数组创建单独的实体,dateotherProps作为属性 - 在查询中用作排序/过滤器要简单得多。一般来说,一种更具伸缩性的方法,恕我直言,因为它避免了(重复的)日期数组属性的列表,请参阅Creating your own activity logging in GAE/P

答案 1 :(得分:0)

您可以使用arrayName.date < certainDate简单地引用查询中的元素。它将起作用,因为索引不是复合索引,这意味着您不会尝试过滤yourKind.property = value and arrayName.date < certainDate之类的内容。

我强烈建议你不要将日期保存为字符串,而是使用时间戳(如javascript(new Date())。getTime()),这将使它在long therm中变得非常容易,主要是因为你正在使用不止一个时区。