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

Virker `$eq`-operatoren med array dot notation?

Nej. $nodes.0 er ikke et korrekt udtryk i $eq aggregation operator , når det bruges sammen med matrixfelter.

$eq aggregation operator har følgende snytax:

{ $eq: [ <expression1>, <expression2> ] }

Du skal bruge $reduce sammen med $arrayElemAt for at få adgang til dit felt i $eq-operatoren:

Forespørgsel1

db.relations.find({
  $expr: {
    $eq: [
      {
        $reduce: {
          input: [
            {
              $arrayElemAt: [
                "$nodes",
                0
              ]
            }
          ],
          initialValue: false,
          in: {
            "$and": [
              {
                $eq: [
                  "$$this.type",
                  "User"
                ]
              },
              {
                $eq: [
                  "$$this.id",
                  UUID("dc20f7c7-bd45-4fc1-9eb4-3604428fa551")
                ]
              }
            ]
          }
        }
      },
      true
    ]
  }
})
 

Legeplads

Alternativt ved at bruge $eq-operatoren { <field>: { $eq: <value> } }

Forespørgsel 2

db.relations.find({
  "$and": [
    {
      "nodes.0.type": {
        $eq: "User"
      }
    },
    {
      "nodes.0.id": {
        $eq: UUID("dc20f7c7-bd45-4fc1-9eb4-3604428fa551")
      }
    }
  ]
})
 

MongoDB Playground

Hvis du vil udføre IXSCAN, kan du bruge Query2 . Du skal oprette følgende indekser:

db.relations.ensureIndex({"nodes.0.id":1})
db.relations.ensureIndex({"nodes.0.type":1})
 



  1. Azure Redis Cache - Flere fejl TimeoutException:Timeout udfører GET {key}

  2. MongoDB - $set til at opdatere eller skubbe Array-element

  3. Opdater MongoDB-feltet ved hjælp af værdien af ​​et andet felt

  4. meteor:hvordan kan jeg sikkerhedskopiere min mongo-database