我在使用Google Cloud DataStore查询时遇到了一个奇怪的情况。
这是我的代码:
var cutoff = DateTime.UtcNow.AddDays(-30);
var query = new Query("message")
{
Filter = Filter.And(
Filter.Equal("type", type),
Filter.Equal("receiver", receiver),
Filter.Equal("sender", sender),
Filter.GreaterThanOrEqual("created", cutoff))
};
// type is integer, receiver and sender is string
异常日志如下所示:
Grpc.Core.RpcException: Status(StatusCode=FailedPrecondition, Detail="no matching index found. recommended index is:
- kind: message
properties:
- name: receiver
- name: sender
- name: type
- name: created
")
我多次检查过所有属性确实存在。
下面说明为什么我称之为奇怪:
当我删除属性created
时,它运行正常:
var query = new Query("message")
{
Filter = Filter.And(
Filter.Equal("type", type),
Filter.Equal("receiver", receiver),
Filter.Equal("sender", sender)
};
// works fine
指导我考虑财产created
是关键点。
但是当我只使用created
时,它工作正常。
var query = new Query("message")
{
Filter = Filter.And(
Filter.GreaterThanOrEqual("created", cutoff))
};
// works fine too
我不知道发生了什么。
任何帮助将不胜感激。
感谢阅读。
答案 0 :(得分:1)
好的,我自己解决了这个问题。
消息确实显示我没有正确地为DataStore创建索引。
Here is how to create and upload the index file(index.yaml).
重置索引后,它可以正常工作。