GuTxO
GuTxO

Reputation: 21

MongoDb $projection query on C#

I need help on how to build a MongoDB query from the C# Driver. What I'm trying to make is a datediff in milliseconds and then filter those results where the datediff in milliseconds is greater or equal than an specific number.

The mongodb query that I use in the mongo shell is:

db.getCollection('Coll').aggregate(
[    
    {$project : {
       "dateInMillis" : {$subtract: [ new Date(), "$UpdateDate" ]},        
       "Param2": "$Param2",
       "Param3": "$Param3"}
    },
    {$match :{ dateInMillis : { $gte : 2662790910}}}
], 
{
    allowDiskUse : true
});

Which would be the equivalente C# expression?

I've been trying to make the query in many different ways without any result.

Upvotes: 1

Views: 522

Answers (1)

GuTxO
GuTxO

Reputation: 21

I finally found the way to make the aggregate query through the mongodb c# driver. I don't know if its the most efficient way but it's working.

var project = new BsonDocument()
{
    {
        "$project",
        new BsonDocument
            {
                {"dateInMillis", new BsonDocument
                                   {
                                       {
                                           "$subtract", new BsonArray() {new  BsonDateTime(DateTime.UtcNow), "$UpdateDate" }
                                       }
                                   }
                },
                {
                    "Param2", "$Param2"
                },
                {
                    "Param3", "$Param3"
                },
                {
                    "_id", 0
                }
            }
    }
};
var match = new BsonDocument()
{
    {
        "$match",
        new BsonDocument
            {
                {
                    "dateInMillis",
                    new BsonDocument {
                        {
                            "$gte",
                            intervalInMilliseconds
                        }
                     }
                }

            }
    }
};

var collection = db.GetCollection<CollClass>("Coll");

var pipeline = new[] { project, match };
var resultPipe = collection.Aggregate<CollClassRS>(pipeline);

Upvotes: 1

Related Questions