CosmosDB mongodb-$ all结合$ elemMatch查询嵌套对象的集合无法正常工作

时间:2018-10-24 11:05:59

标签: azure azure-cosmosdb azure-cosmosdb-mongoapi

我正在使用CosmosDB(带有mongodb-api)。

在此示例中,我使用的是以下文档:

/* 1 */
{
    "_id" : "abspi4lxwfbfjahdvjm3clnnl4",
    "categories" : [ 
        {
            "_name" : "category-1",
            "date" : NumberLong(1540373282070),
            "string" : "20",
            "number" : 20
        }, 
        {
            "_name" : "category-2",
            "string" : "1",
            "number" : 1
        }
    ]
}

/* 2 */
{
    "_id" : "ggi36vpvprdbrdnji5otypbh3e",
    "categories" : [ 
        {
            "_name" : "category-2",
            "date" : NumberLong(1540373282071),
            "string" : "1",
            "number" : 1
        }
    }
}

/* 3 */
{
    "_id" : "kdh3jdyenapq54clufgajmgfy8",
    "categories" : [ 
        {
            "_name" : "category-1",
            "date" : NumberLong(1540373282070),
            "string" : "20",
            "number" : 20
        }, 
        {
            "_name" : "category-2",
            "string" : "1",
            "number" : 1
        },
        {
            "_name" : "category-3",
            "string" : "29",
            "number" : 29
        }
    ]
}

我需要检索文档1和3,下一个查询匹配在mongoDB中可以正常工作。

db.getCollection('test_collection')
    .find({"categories":{
        "$all":[
            {"$elemMatch":{"number":20}},
            {"$elemMatch":{"number":1}}
        ]
     }
})

在CosmosDB中返回0条记录。似乎不支持在cosmosDB中超过1个elemMatch。 任何可能的想法都可以使用mongoDB-api在CosmosDB中进行查询吗?

2 个答案:

答案 0 :(得分:0)

  

在CosmosDB中返回0条记录。似乎有1个以上的elemMatch   不支持cosmosDB。

是的,根据我的测试,Cosmos Mongo API不支持$and运算符和1个以上elemMatch条件的组合。据我所知,CosmosDB仅支持MongoDB API的一部分,并将请求转换为CosmosDB SQL等效项。 CosmosDB有一些不同的行为和结果。但是CosmosDB有责任改进他们对MongoDB的仿真。

当然,您可以添加反馈here来提交您的要求,或者,如果您想完全支持MongoDB功能,可以考虑在Azure上使用MongoDB Atlas

希望它对您有帮助。

答案 1 :(得分:0)

已解决此问题,适用于2018年10月底创建的新数据库。 我们做了很多测试以测试兼容性,并且效果很好。

这一次我们很幸运,一直在考虑使用SQL查询将所有系统更改为documentDB。

我希望帖子能帮助其他可能处于同样情况的人。