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: