嵌套查询在Cosmos DB中不能超过1级深度

时间:2018-04-03 19:33:49

标签: mongodb-query azure-cosmosdb

我无法让Cosmos DB在查询中找到超过1级的记录:

文件:

{
    "CustomerId": 1,
    "Orders": [
        {
            "OrderId": 1,
            "OrderCode": "ONE",
            "OrderName": "Order One",
            "Products": [
                {
                    "ProductCode": "ONE",
                    "ProductName": "Product One"
                }
            ]
        }
    ]
}

查询:db.customers.find({ "Orders.Products.ProductCode": "ONE" })

它适用于MongoDB shell,但不适用于CosmosDB。我错过了一些明显的东西吗?

2 个答案:

答案 0 :(得分:0)

我认为问题的关键在于文档中存在嵌套数组,并且您提供的查询可能仅适用于以下文档:

"CustomerId" : 1,
"Orders" : {
    "OrderId" : 1,
    "OrderCode" : "ONE",
    "OrderName" : "Order One",
    "Products" : {
        "ProductCode" : "ONE",
        "ProductName" : "Product One"
    }
}

您可以参考MongoDB官方documentation并使用$elemmatch运算符查询嵌套文档中的字段。

<强> 查询

{ "Orders": { $elemMatch: { Products : {$elemMatch : {ProductCode : "ONE" } } } } }

希望它对你有所帮助。

答案 1 :(得分:0)

Cosmosdb在嵌套文档中没有要查询的内容。您需要使用 ARRAY_CONTAINS 内置函数。所以它会是这样的:

SELECT c.Orders.Products.ProductCode, c.Orders.Products.ProductName 
FROM c
WHERE c.Orders.Products.ProductCode = "ONE" or ARRAY_CONTAINS(c.Orders.Products, { "ProductCode": "ONE" })