MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Ordinamento condizionale Mongodb

Crea un campo virtuale che rappresenti un valore per le voci che dovrebbero essere mostrate in cima all'elenco, quindi ordina le voci in base a quel campo. Puoi utilizzare $addFields e $cond operatori per realizzarlo.

L'implementazione sarebbe qualcosa del genere:

// ...
{
  "$addFields": {
    "isFeaturedSort": {
      "$cond": {
        "if": {
          "$and": {
            "publishDate": {
              "$gte": ISODate("2019-03-14T00:00:00.000Z"),
            },
            "$eq": ["isFeatured", true],
          },
        },
        "then": 1,
        "else": 0,
      },
    },
  },
},
{
  "$sort": {
    "isFeaturedSort": -1, // changed
    "refreshes.refreshAt": -1,
    "publishDate": -1,
    "_id": -1,
  },
},
// ...

Tieni presente che $addField funziona solo in MongoDB 3.4 e oltre. anche il codice degli snippet potrebbe contenere errori.