sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongodb villkorlig sortering

Skapa ett virtuellt fält som representerar ett värde för posterna som ska visas överst i listan, sortera sedan poster baserat på det fältet. Du kan använda $addFields och $cond operatörer för att åstadkomma det.

Implementeringen skulle vara ungefär så här:

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

Observera att $addField fungerar bara i MongoDB 3.4 och vidare. även kodavsnittskoden kan innehålla fel.




  1. MongoDB uppdaterar arrayobjekt inom en array

  2. Redis:Summan av SCORES i sorterad uppsättning

  3. En lista över index i MongoDB?

  4. MongoDb bulk operation få id