如何解决:Azure Cosmos DB SQL API似乎不起作用

时间:2019-06-25 10:22:15

标签: java azure azure-cosmosdb

我目前正在参与从MongoDB实例到Azure Cosmos数据库实例的迁移。因此,我放弃了mongo-java-driver依赖关系,并将其替换为最新的azure-documentdb(版本2.4.0)依赖项。

我的trips Azure Cosmos数据库中有一个foobar集合,具有以下文档结构:

{
    "_id" : ObjectId("5d0cdd6a6b1bb358985eb5d5"),
    "od" : 1561075200000,
    "rid" : "d001",
    "tnr" : 1007,
    "rsn" : 0,
    "p" : [
        {
            "s" : 1,
            "st" : "P",
            "sid" : "18003100",
        },
        {...}
    ]
}

我为该迁移项目尝试的第一件事是使用简单的where语句查询旅行集合,该语句的代码方式与此处的示例大致相同:https://github.com/Azure/azure-documentdb-java/

问题如下。当我尝试在行程集合中查询rid等于d001的文档时,它使用以下代码返回零结果。事实并非如此,因为我的行程集合中有9个匹配的文档。

DocumentClient client = new DocumentClient(
    HOST, 
    MASTER_KEY, 
    ConnectionPolicy.GetDefault(), 
    ConsistencyLevel.Session);

FeedOptions feedOptions = new FeedOptions();
FeedResponse<Document> query = client.queryDocuments(
    "dbs/foobar/colls/trips", 
    "SELECT * FROM trips t WHERE t.rid='d001'", 
    feedOptions);

List<Document> results = query.getQueryIterable().toList();
System.out.println(results.size());

还将查询更改为"SELECT t.rid FROM trips t"会返回零结果。 同样,将查询更改为"SELECT * FROM trips t WHERE t['rid']='d001'"也会返回零结果。

当我将查询更改为"SELECT * FROM trips t"时,一切似乎都很好,它返回了集合中的所有文档。

这里可能是什么问题?

1 个答案:

答案 0 :(得分:0)

尝试以下查询,

FeedResponse<Document> query = client.queryDocuments(
    "dbs/foobar/colls/trips", 
    "SELECT * FROM trips t WHERE t.rid='d001'", 
    null).toBlocking().first();