$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 :