sql >> Database >  >> NoSQL >> MongoDB

Mongodb voorwaardelijke sortering

Maak een virtueel veld dat een waarde vertegenwoordigt voor de items die bovenaan de lijst moeten worden weergegeven, en sorteer vervolgens de items op basis van dat veld. U kunt $addFields gebruiken en $cond operators om dit te realiseren.

De implementatie zou ongeveer als volgt zijn:

// ...
{
  "$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,
  },
},
// ...

Houd er rekening mee dat $addField werken alleen in MongoDB 3.4 en verder. Ook de code van de fragmenten kan fouten bevatten.




  1. Enorme vertraging bij gebruik van Celery + Redis

  2. zoek in combinatie twee veld in Mongodb

  3. Munin Mongodb-plug-in wordt niet weergegeven. . .?

  4. Hoe datum en tijd in Meteor op te slaan voor bereikquery's?