$expr
tillader kun brug af Aggregation Expression Operators . Den priknotation, du bruger, fungerer ikke for at få adgang til array-elementet for feltet "values" : [ 1 ]
. Du skal bruge $arrayElemAt
operatør, og det fungerer fint.
Din kode find({$expr: {$eq: ["$value1", "$value2"]}})
virkede, fordi $expr
brugte aggregeringsudtryksoperatoren $eq
, ikke MongoDB Query Language (MQL)'s operatør $eq . Bemærk, at begge operatorer ligner hinanden, men brugen og syntaksen er forskellig.
Og koden find({$expr: {$eq: ["$value1", "$values.0"]}})
virkede ikke - som forventet. I aggregeringsoperatoren $values.0
, 0
fortolkes som feltnavn, ikke et indeks for et matrixfelt.
Punktnotationen fungerer fint i $expr
også. Her er et eksempel med eksempeldokument:
{ "_id" : 1, "val" : { "0" : 99, "a" : 11 } }
Bruger nu $expr
og priknotation:
db.test.find({ $expr: { $eq: [ "$val.0", 99 ] } } )
db.test.find({ $expr: { $eq: [ "$val.a", 11 ] } } )
Begge forespørgsler returnerer dokumentet - matchningen sker med filteret ved hjælp af $expr
og priknotationen. Men dette er kun gyldigt med indlejrede (eller underordnede) dokumenter ikke med matrixfelter.
Form dokumentationen, Aggregation Pipeline Operators siger:
udtryk :