Cosmodb:" message":"语法错误,无效数值标记' 4d5f'。"错误

时间:2018-01-11 19:33:23

标签: c# azure azure-cosmosdb

我正在尝试查询文档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'."

任何帮助将不胜感激!

2 个答案:

答案 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()