0

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.

Florin D. Preda
  • 1,358
  • 1
  • 11
  • 25

0 Answers0