Ali Itani
Ali Itani

Reputation: 1

I am building a mongoose aggregate for search mongodb documents

I built an aggregate for searching according to a filter. The things that the user can search for are optional, So is there any way to make the match optional - for example the user can select a date, If he didn't select, I want the aggregate function not to use match date

    db.articles.aggregate(
        [ { 
            $match : { date : userSelectedDate }, { else : elseSelection} 
        } ]
    );

If no date is selected => cancel the date matching and match anothers

Upvotes: 0

Views: 148

Answers (2)

Ali Itani
Ali Itani

Reputation: 1

The solution was in mongoose documentation using: Aggregate#append(ops)

Appends new operators to this aggregate pipeline after having the aggregate

    aggregate.append({ $project: { field: 1 }}, { $limit: 2 });

so now I can use if(condition) before appending

mongoose documentation for append

Upvotes: 0

ema
ema

Reputation: 5783

I would try to build the query document dynamically.

var query = []
if (userSelectedDate){
  query.push({ $match : { date : userSelectedDate }})

db.articles.aggregate(query)

Upvotes: 2

Related Questions