sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB $unset Pokud je splněna podmínka

Dotaz

  • používá systémovou proměnnou $$REMOVE pokud pole získá tuto hodnotu, je odstraněno
  • podmínka je tedy user.code , ponechte starou hodnotu, pokud není "BLOCKED" ,"CANCELLED" , jinak "$$REMOVE" pole

Testovací kód zde

db.collection.aggregate([
  {
    "$set": {
      "user.code": {
        "$cond": [
          {
            "$in": [
              "$user.status",
              [
                "BLOCKED",
                "CANCELLED"
              ]
            ]
          },
          "$$REMOVE",
          "$user.code"
        ]
      }
    }
  }
])

Upravit

Výše uvedený kód kontroluje user.status ale chcete odstranit kód nebo nikoli na základě user.olderAdress.status (po uvolnění) (jeho 2 pole se stejným názvem)

Dotaz (toto přidejte po fázích, které již máte)

Testovací kód

{
    "$set": {
      "user.code": {
        "$cond": [
          {
            "$in": [
              "$user.status",
              [
                "BLOCKED",
                "CANCELLED"
              ]
            ]
          },
          "$$REMOVE",
          "$user.code"
        ]
      }
    }
  }



  1. 'TypeError:meme.find(...).forEach is not a function' v mongoose node js?

  2. Alternativy k vnořeným strukturám v Redis?

  3. DeprecationWarning:collection.findAndModify je zastaralá. Místo toho použít findOneAndUpdate, findOneAndReplace nebo findOneAndDelete?

  4. MongoDB:najít čas provedení příkazu count() na milionech záznamů v kolekci?