我有一个mongo集合,如下所示:
我正在使用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的数量?
其他内容
还有一件事,我在这类查询中苦苦挣扎,我想从集合中查询。如果您认为可以,请向我推荐任何好的一步一步的详细文档。
答案 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。