8

I am trying to get the distinct values from a field in MongoDB. I am having real trouble with the Syntax. Using mongoshell it's relatively easy to do, this is the query I run:

db.cmstest.distinct("categories")

This query returns an array of strings with all the distinct values.

Now I am trying to get the syntax right using the latest official MongoDB Drivers, but not to much success. This is my code, which is unsuccessful:

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

Mind you categories is a List<string>.

Could anyone help shed some light? I've tried looking both in the documentation and online and haven't found much.

Thank you in advance.

Yiannis P.
  • 141
  • 1
  • 2
  • 15

2 Answers2

14

You could try the following approach:

var filter = new BsonDocument();
var categoriesList = await blogContext.Articles.DistinctAsync<string>("categories", filter);
chridam
  • 100,957
  • 23
  • 236
  • 235
  • 2
    I'd prefer `DistinctAsync` instead of `DistinctAsync` as it's safer than strict typecasting. Just my two cents. otherwise, good solution. – Saleem Mar 01 '16 at 15:17
  • @Saleem I concur, though solution is coming from the OP's perspective where they are expecting a distinct string list. – chridam Mar 01 '16 at 15:36
  • Thank you very much for your answer. I used this, based on what you said: `var categoriesList = await blogContext.Articles.Distinct("categories", "{}").ToListAsync();` – Yiannis P. Mar 01 '16 at 15:37
2

Better yet you can use a lambda expression to be type safe.

For example:

await this.Collection.DistinctAsync(flow => flow.timestampDate, new BsonDocument());

Jack
  • 2,891
  • 11
  • 48
  • 65