您好我正在尝试从node.js api查询google datastore条目。我有一个实体,它有一个所有者(字符串),一个开始时间(日期时间)和一个结束时间(日期时间)我试图查询匹配给定所有者字符串的所有实体,并在给定日期之后开始以下功能(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
运行查询时,我收到错误前提条件失败错误。如果我能提供更多信息,我会非常高兴。
答案 0 :(得分:4)
您列出的查询仅在owner
和end
上。使用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
})