I have the following collection:
{ "name": "name 1", "type": 1, description: "desc 1", "version": 1}
{ "name": "name 1", "type": 1, description: "desc 1 updated","version": 2}
{ "name": "name 2", "type": 1, description: "desc 2", "version": 1}
{ "name": "name 2", "type": 1, description: "desc 2 updated","version": 2}
Each time a new item needs to be added with the same "name" and "type" a new version will be created. For example, if I need to add:
{ "name": "name 2", "type": 1, description: "desc 2 updated again" }
Then my updated collection will look like:
{ "name": "name 1", "type": 1, description: "desc 1", "version": 1}
{ "name": "name 1", "type": 1, description: "desc 1 updated","version": 2}
{ "name": "name 2", "type": 1, description: "desc 2", "version": 1}
{ "name": "name 2", "type": 1, description: "desc 2 updated","version": 2}
{ "name": "name 2", "type": 1, description: "desc 2 updated again","version": 3}
What I want is to implement a query that returns the most recent versions of elements, unless a specific version is specified.
So by default the query should return:
{ "name": "name 1", "type": 1, description: "desc 1 updated","version": 2}
{ "name": "name 2", "type": 1, description: "desc 2 updated again","version": 3}
Or if I specify a version, e.g. 2, then it should return:
{ "name": "name 1", "type": 1, description: "desc 1 updated","version": 2}
{ "name": "name 2", "type": 1, description: "desc 2 updated","version": 2}
So far I've reached the point where I can get the count grouped by one field:
_mongoDB.Collection.Aggregate()
.Match(filter)
.Group(new BsonDocument
{
{ "_id", "$name"},
{ "count", new BsonDocument("$sum", 1)}
});
So far I built the filters using the Filter Definition Builder.