我正在尝试查询文档db中的一些信息,它曾经在我们有id字段时更早地工作,我最近用Guid字段替换,当我们运行以下查询时它会抛出错误如下
代码:
queryString = string.Format(
"SELECT f.keys.Timestamp,f.keys.selectedFieldId FROM {0} f WHERE f.logevent = '{1}' AND f._ts > {2} AND f._ts <= {3}",
DocumentDbRepository.DatabaseId, Enums.Events.ApplicationAuthenticationSuccess, refUnixTime,
currentUnixTime);
错误:
"message":"Syntax error, invalid numeric value token '4d5f'."
任何帮助将不胜感激!
答案 0 :(得分:3)
如果这是FROM子句中{0}的替换值,则它必须符合有效的标识符(即以字母字符或下划线开头)。 无论如何,你真的不需要在这里指定数据库Id,任何标识符都可以,因为集合总是与你连接的集合。换句话说,您可以将查询编写为&#39; SELECT ... FROM f WHERE ...)
答案 1 :(得分:-1)
在使用Cosmos DB Java API时,我也面临类似的问题。使用SqlQuerySpec API可以解决此问题
使用DocumentClient.queryDocuments(字符串collectionLink,SqlQuerySpec querySpec,FeedOptions选项)
//Create SQLQuerySpec instance as below
String query = "SELECT * FROM mycollections m WHERE w.id =@param1 and w.user
=@param2";
SqlParameterCollection col = new SqlParameterCollection();
SqlParameter sqlParameter1 = new SqlParameter("@param1", id);
SqlParameter sqlParameter2 = new SqlParameter("@param1", user);
col.add(sqlParameter1);
col.add(sqlParameter2);
SQLQuerySpec sqlspec = new SQLQuerySpec(query,col);
FeedOptions options = new FeedOptions()
options.setEnableCrossPartitionKey(true);
List<Documents> results = documentClient.queryDocuments(collectionLink,
sqlSpec,options).getQueryIterable().toList()