我在CosmosDB上使用MongoDB API。 我的文档在CosmosDB中有以下结构:
{
"_id": "Companies",
"companies_list": [
{
"name":"c1",
"host": "www.example1.com"
},{
"name":"c2",
"host": "www.example2.com"
},{
"name":"c3",
"host": "www.example3.com"
},{
"name":"c4",
"host": "www.example1.com"
},
]
}
是否可以只投影数组中与主机条件匹配的元素?
我尝试了以下代码,但它不起作用:
var filter = Builders<BsonDocument>.Filter.Eq("_id", "Companies");
var filterOnProjection = Builders<BsonDocument>.Filter.Eq("host", "www.example1.com");
var projection = Builders<BsonDocument>.Projection.ElemMatch("companies_list", filterOnProjection);
应该返回:
{
"_id": "Companies",
"companies_list": [
{
"name":"c1",
"host": "www.example1.com"
},{
"name":"c4",
"host": "www.example1.com"
},
]
}
我该怎么做?
答案 0 :(得分:0)
使用当前版本的C#驱动程序无法很好地编写某些查询...试试这个:
var filter = Builders<BsonDocument>.Filter.Eq("_id", "Companies");
var result = collection.Aggregate()
.Match(filter)
.Project("{ 'companies_list': { $filter: { input: '$companies_list', cond: { $eq: [ '$$this.host', 'www.example1.com' ] } } } }")
.ToList();