10

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.

2 Answers 2

16

You could try the following approach:

var filter = new BsonDocument();
var categoriesList = await blogContext.Articles.DistinctAsync<string>("categories", filter);
Sign up to request clarification or add additional context in comments.

3 Comments

I'd prefer DistinctAsync<dynamic> instead of DistinctAsync<string> as it's safer than strict typecasting. Just my two cents. otherwise, good solution.
@Saleem I concur, though solution is coming from the OP's perspective where they are expecting a distinct string list.
Thank you very much for your answer. I used this, based on what you said: var categoriesList = await blogContext.Articles.Distinct<string>("categories", "{}").ToListAsync();
2

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

For example:

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.