我在这个查询中做错了什么?
SELECT * FROM TreatmentPlanDetails
WHERE
accountId = 'ag5zfmRvbW9kZW50d2ViMnIRCxIIQWNjb3VudHMYtcjdAQw' AND
status = 'done' AND
category = 'chirurgia orale' AND
setDoneCalendarEventStartTimestamp >= [timestamp for 6 june 2012] AND
setDoneCalendarEventStartTimestamp <= [timestamp for 11 june 2012] AND
deleteStatus = 'notDeleted'
ORDER BY setDoneCalendarEventStartTimestamp ASC
我没有得到任何记录,我确信有记录符合where子句条件。为了获得正确的记录,我必须将时间戳间隔加宽1毫秒。这是正常的吗?此外,如果我通过删除类别过滤器来修改此查询,我将得到正确的结果。这绝对是奇怪的。 我也问谷歌小组,但我没有回答。无论如何,详情: https://groups.google.com/forum/?fromgroups#!searchin/google-appengine/query/google-appengine/ixPIvmhCS3g/d4OP91yTkrEJ
答案 0 :(得分:1)
让我们具体谈谈创建进入查询的时间戳。您使用什么代码来创建时间戳记录?显然这很重要,因为对它进行模糊测试会影响查询。可能相关的是,在数据存储区中,时间戳记录为表示具有微秒的posix时间戳的整数,即自1970年1月1日UTC(不计算闰秒)以来的微秒数。同样重要的是日期(即没有时间)表示为午夜,即当天的最早时间。但请告诉我们确切的代码。 (显示您尝试检索的记录的实际内容也很重要。)
答案 1 :(得分:1)
除了您的问题并非特定之外:实体属性名称计入存储配额的一部分。如果这将是一个巨大的数据集,您可能会为setDoneCalendarEventStartTimestamp等属性名称支付更多的$$。
答案 2 :(得分:0)
因为你写道:
如果我通过删除类别过滤器来修改此查询,我得到了 正确的结果
这可能意味着在将匹配记录写入数据存储时未对该类别编制索引。如果要将记录添加到新创建的索引中,则必须将记录重新写入数据存储。