C#CosmosDB如何只获取匹配特定值的数组中的元素

时间:2017-12-07 10:03:09

标签: c# jquery mongodb

我在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"
         },
    ]
}

我该怎么做?

1 个答案:

答案 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();
相关问题