使用C#,MongoDb.Driver

时间:2018-02-11 10:52:54

标签: c# mongodb mongodb-.net-driver

我有一个mongo集合,如下所示:

enter image description here

我正在使用C#,ASP .Net Core 2.0 MongoDB 3.6

我需要获取那些具有视频链接值的TopicVideo对象的计数(至少不为空)

Count(distinct VideoLink) From TopicVideo Where videolink is not null

对我来说,检查是否以http开头是否就足够了。

这是一个代码,我尝试过但没有工作。

var teahcersCollection = database.GetCollection<BsonDocument>("Teachers");
        return teahcersCollection.Count(Builders<BsonDocument>.Filter.Regex("TopicVideo.VideoLink'", "/http.*/"));

再次,要清除,如何在这种情况下获取videoLink的数量?

其他内容

还有一件事,我在这类查询中苦苦挣扎,我想从集合中查询。如果您认为可以,请向我推荐任何好的一步一步的详细文档。

1 个答案:

答案 0 :(得分:0)

您可以使用以下聚合查询:

var teachersCollection = database.GetCollection<Teacher>("Teachers");
var regexFilter = Builders<BsonDocument>.Filter.Regex("TopicVideo.VideoLink", "/^http/");
var httpBsonCount = teachersCollection.Aggregate()
    .Unwind(t => t.TopicVideo)
    .Match(regexFilter)
    .Group(new BsonDocument { { "_id", "null" }, { "count", new BsonDocument { { "$sum", 1 } } } })
    .ToList();

int httpCount = 0;
if (httpBsonCount.Any())
    httpCount = httpBsonCount.First()["count"].AsInt32;

执行查询后,httpCount将包含您的预期值。

在mongo控制台中,查询如下所示:

db.Teachers.aggregate([
    { $unwind: "$TopicVideo"},
    { $match: { "TopicVideo.VideoLink": /^http/ } },
    { $group: { _id: null, count: { $sum : 1 } } }
]);

为了了解如何通过C#驱动程序查询MongoDB,我建议您关注免费的M101N course