Azure CosmosDB嵌套WHERE查询

时间:2018-12-07 14:25:57

标签: azure-cosmosdb

我正在尝试在CosmosDB中实现以下查询:

SELECT * FROM c
WHERE c.timestamp = (SELECT VALUE MAX(c.timestamp) FROM c )

但是,它似乎并不是先调用子查询并返回所有行。

这可能吗?

1 个答案:

答案 0 :(得分:0)

我来自CosmosDB工程团队。

CosmosDB查询仅支持相关的子查询,因此子查询只能引用父集合中的项目。例如,您可以像这样在文档中的嵌套属性上使用聚合:

SELECT TOP 1000 
    c.id, 
    MaxNutritionValue,
    MinNutritionValue,
    AvgNutritionValue
FROM c
JOIN (SELECT VALUE Max(n.nutritionValue) FROM n IN c.nutrients) MaxNutritionValue
JOIN (SELECT VALUE Min(n.nutritionValue) FROM n IN c.nutrients) MinNutritionValue
JOIN (SELECT VALUE Avg(n.nutritionValue) FROM n IN c.nutrients) AvgNutritionValue

假设这样的文档结构:

{
     "id":"someId",
     "nutrients":[
            { 
               "item": "pizza",
               "nutritionValue": 20 
            },
            { 
               "item": "burger",
               "nutritionValue": 30 
            }
     ] 
}

要实现所需的目标,可以执行以下操作:

SELECT TOP 1 * FROM c ORDER BY c.timestamp DESC 

尽管不适用于所有聚合,但此方法可以帮助最大或最小。