MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Работи ли операторът `$eq` с масивна нотация с точки?

$nodes.0 не е правилен израз в $eq aggregation operator , когато се използва с масивни полета.

$eq aggregation operator има следния snytax:

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

Ще трябва да използвате $reduce заедно с $arrayElemAt за достъп до вашето поле в $eq оператор:

Заявка1

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
    ]
  }
})

Playground

Алтернатива, използвайки $eq оператор { <field>: { $eq: <value> } }

Заявка 2

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

MongoDB Playground

Ако искате да извършите IXSCAN, можете да използвате Query2 . Трябва да създадете следните индекси:

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



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Сравнителен анализ на MongoDB – повишаване на производителността на NoSQL

  2. Как да обработваме заявки за вмъкване в Spring Data, преди да ги добавим към MongoDB?

  3. Изчислете точково произведение между два масива с MongoDB Aggregate

  4. ServerSelectionTimeoutError errno 11001 getaddrinfo неуспешно python

  5. C# MongoDB - Изтеглете елемент от масива на вложен документ въз основа на ID