我正在使用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中进行查询吗?
答案 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。
我希望帖子能帮助其他可能处于同样情况的人。