C# MongoDB去重查询语法

8

我试图从MongoDB中的一个字段获取唯一值。但是在语法方面遇到了真正的麻烦。使用mongoshell相对容易实现,这是我运行的查询:

db.cmstest.distinct("categories")

这个查询返回一个包含所有不同值的字符串数组。

现在我正在尝试使用最新的官方 MongoDB 驱动程序获取正确的语法,但并没有太大的成功。以下是我的代码,但不成功:

var categoriesList = await blogContext.Articles.DistinctAsync<List<string>>("categories", "");

顺便提一下,这里的categories是一个List<string>

有没有人可以帮忙解释一下?我已经尝试在文档和网上搜索,但没找到什么有用的信息。

提前感谢您。

2个回答

14

你可以尝试以下方法:

var filter = new BsonDocument();
var categoriesList = await blogContext.Articles.DistinctAsync<string>("categories", filter);

2
我更喜欢使用DistinctAsync<dynamic>而不是DistinctAsync<string>,因为它比严格的类型转换更安全。这只是我的个人意见。除此之外,这是一个很好的解决方案。 - Saleem
@Saleem 我同意,不过解决方案是从 OP 的角度出发的,他们期望得到一个明确的字符串列表。 - chridam
非常感谢您的回答。根据您所说的,我使用了以下代码:var categoriesList = await blogContext.Articles.Distinct<string>("categories", "{}").ToListAsync(); - Yiannis P.

2
更好的方法是使用 lambda 表达式,以确保类型安全。
例如: await this.Collection.DistinctAsync(flow => flow.timestampDate, new BsonDocument());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接