sql >> Database >  >> NoSQL >> MongoDB

$expr query-operator lijkt niet te werken met matrixpuntnotatie

De $expr staat het gebruik van aggregatie-expressie-operators alleen toe . De puntnotatie die u gebruikt, werkt niet om toegang te krijgen tot het array-element voor het veld "values" : [ 1 ] . U moet de $arrayElemAt . gebruiken operator, en het werkt prima.

Uw code find({$expr: {$eq: ["$value1", "$value2"]}}) werkte, omdat de $expr gebruikte de aggregatie-expressie-operator $eq , niet de operator van de MongoDB Query Language (MQL) $eq . Merk op dat beide operators op elkaar lijken, maar het gebruik en de syntaxis zijn anders.

En de code find({$expr: {$eq: ["$value1", "$values.0"]}}) werkte niet - zoals verwacht. In de aggregatie-operator de $values.0 , de 0 wordt geïnterpreteerd als een veldnaam, niet als een index van een matrixveld.

De puntnotatie werkt prima in $expr ook. Hier is een voorbeeld, met voorbeelddocument:

{ "_id" : 1, "val" : { "0" : 99, "a" : 11 } }

Gebruik nu de $expr en puntnotatie:

db.test.find({ $expr: { $eq: [ "$val.0", 99 ]  } } )
db.test.find({ $expr: { $eq: [ "$val.a", 11 ]  } } )

Beide query's retourneren het document - de overeenkomst gebeurt met het filter met behulp van de $expr en de puntnotatie. Maar dit is alleen geldig met ingesloten (of sub) documenten niet met matrixvelden.

Vorm de documentatie, Aggregation Pipeline Operators zegt:

expressies :




  1. MongoDb Hoe groeperen op maand en jaar van string

  2. MongoDB + Django instellen

  3. Een Mongoose seeding-script omzetten in een belofte

  4. Hoe selderij-redis configureren in django-project op Microsoft Azure?