Google 数据存储前提条件失败,带有时间戳

Google datastore precondition fail with timestamps

您好,我正在尝试从 node.js api 中查询 google 数据存储条目。我有一个实体,它有一个所有者(字符串)、一个开始时间(日期时间)和一个结束时间(日期时间) 我正在尝试查询与给定所有者字符串匹配并在给定日期之后开始的所有实体函数 (es2016).

static async getAvailability (owner, month = currentMonth) {
    const firstOfMonth = moment([currentYear, month])
    const query = datastore.createQuery('availability')
      .filter('owner', '=', owner)
      .filter('end', '>', firstOfMonth.toDate().toJSON())
      .order('end', {
        descending: true
      })
    try {
      // promise version of run query same function
      const result = await datastore.runQueryAsync(query)
      return result.map(result => {
        const { key, data } = result
        data._id = key.id
        return data
      })
    } catch (e) {
      console.log('error', e.stack)
      return []
    }
}

index.yaml 指数

- kind: availability
  properties:
  - name: owner
  - name: start
    direction: desc
  - name: end
    direction: desc

我在 运行 查询时收到错误前提条件失败错误。如果我能提供更多信息,我会非常高兴。

您列出的查询仅针对 ownerend。当您使用 Cloud Datastore 时,您使用的索引必须与查询完全匹配。

对于您列出的查询,您需要索引:

- kind: availability
  properties:
  - name: owner
  - name: end
    direction: desc

如果您真的希望开始日期是特定时间,则您的过滤器必须是:

  .filter('start', '>', firstOfMonth.toDate().toJSON())

而您 would have to specify it first 在您的订单中:

 .order('start')
 .order('end', {
    descending: true
  })