sql >> Databáze >  >> NoSQL >> MongoDB

Operátor dotazu $expr zřejmě nefunguje s tečkovaným zápisem pole

$expr umožňuje použití agregačních výrazových operátorů pouze . Tečkový zápis, který používáte, nebude fungovat pro přístup k prvku pole pro pole "values" : [ 1 ] . Musíte použít $arrayElemAt a funguje to dobře.

Váš kód find({$expr: {$eq: ["$value1", "$value2"]}}) fungovalo, protože $expr použil operátor agregačního výrazu $eq , ne operátor dotazovacího jazyka MongoDB (MQL) $eq . Všimněte si, že oba operátory vypadají podobně, ale použití a syntaxe se liší.

A kód find({$expr: {$eq: ["$value1", "$values.0"]}}) nefungovalo - podle očekávání. V operátoru agregace $values.0 , 0 je interpretován jako název pole, nikoli index pole pole.

Tečkový zápis funguje dobře v $expr taky. Zde je příklad s ukázkovým dokumentem:

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

Nyní pomocí $expr a tečkovaný zápis:

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

Oba dotazy vracejí dokument - shoda nastane s filtrem pomocí $expr a tečkovou notaci. To však platí pouze pro vložené (nebo dílčí) dokumenty ne s poli pole.

Vytvořte dokumentaci, Operátoři agregačního potrubí říká:

výrazy :




  1. Dotaz MongoDB pro aktualizaci vnořeného pole

  2. ScaleGrid oznamuje MongoDB hostingové služby v Kanadě

  3. MongoDB najdete na všech vlastnostech dokumentu

  4. EPEL MongoDB se nespustí na EC2 Amazon AMI