sql >> Database >  >> NoSQL >> MongoDB

Retourneer het eerste element als er geen overeenkomst is gevonden in de array

Je kunt onderstaande aggregatie proberen

In principe moet je $filter de products array en controleer op de $cond als het geen element bevat of gelijk is aan [] dan moet je $slice met het eerste element van de products array.

db.collection.aggregate([
  { "$addFields": {
    "products": {
      "$cond": [
        {
          "$eq": [
            { "$filter": {
              "input": "$products",
              "cond": { "$eq": ["$$this.product_id", 2] }
            }},
            []
          ]
        },
        { "$slice": ["$products", 1] },
        { "$filter": {
          "input": "$products",
          "cond": { "$eq": ["$$this.product_id", 2] }
        }}
      ]
    }
  }}
])

of zelfs met behulp van $let aggregatie

db.collection.aggregate([
  { "$addFields": {
    "products": {
      "$let": {
        "vars": {
          "filt": {
            "$filter": {
              "input": "$products",
              "cond": { "$eq": ["$$this.product_id", 2] }
            }
          }
        },
        "in": {
          "$cond": [
            { "$eq": ["$$filt", []] },
            { "$slice": ["$products", 1] },
            "$$filt"
          ]
        }
      }
    }
  }}
])


  1. Mongodb is niet correct bijgewerkt van 4.2 naar 4.4

  2. Hoe een afbeelding op te slaan in de backend van het knooppunt?

  3. Converteer MongoDB-veld van String naar ISODate in array

  4. Mongoimport van JSON-bestand