sql >> Database teknologi >  >> NoSQL >> MongoDB

$expr-forespørgselsoperator ser ikke ud til at fungere med matrixpunktnotation

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




  1. Implementerer jeg serialisering og deserialisering af NodesJS + Passport + RedisStore?

  2. TTL udløb af Mongoose refereret dokument

  3. MongoDB:Hvordan forespørger man over en json-streng?

  4. Mongodb returnerer flere sub-array-resultater og ekskluderer andre returnerede resultater