我正在尝试在CosmosDB中实现以下查询:
SELECT * FROM c
WHERE c.timestamp = (SELECT VALUE MAX(c.timestamp) FROM c )
但是,它似乎并不是先调用子查询并返回所有行。
这可能吗?
答案 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
尽管不适用于所有聚合,但此方法可以帮助最大或最小。