1

我正在使用 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 中进行查询?

4

2 回答 2

0

在 CosmosDB 中返回 0 条记录。似乎不支持 cosmosDB 中超过 1 个 elemMatch。

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

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

于 2018-10-25T01:52:09.090 回答
0

对于 2018 年 10 月底创建的新数据库,此问题已得到解决。我们为测试兼容性做了很多测试,并且工作正常。

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

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

于 2018-10-26T14:35:27.393 回答