sql >> Database >  >> NoSQL >> MongoDB

$elemmatch werkt niet in MongoDB

Het had in eerdere versies helemaal niet moeten werken, aangezien je op zijn minst de scoping van this hebt gewijzigd om nu naar "gegevens" te verwijzen als een element op het hoogste niveau. Kortom, dit is niet langer toegestaan ​​en je zou eigenlijk geen JavaScript-methoden moeten gebruiken, tenzij het absoluut moet. Zelfs dan is er in de meeste gevallen waarschijnlijk nog een betere manier.

Maar in feite is dit een onnodig gebruik van JavaScript-matching, omdat het niet vereist is wanneer er andere operators zijn die dit kunnen doen.

Je zou een $regex formulier in plaats daarvan:

db.docs.find({ "data.First_name": /^kim/i })

Of ergens in het veld, verwijder het caret ^ :

db.docs.find({ "data.First_name": /kim/i })

Dat is vrijwel net zo inefficiënt als de uitvoering van JavaScript, maar niet zoveel als er geen overhead is voor verwerking via die interpreter-engine. En natuurlijk werkt het overal.

Denk ook na over wat een query die op JavaScript moet worden opgelost eigenlijk doet:

  • Vraagt ​​een JavaScript-interpreterinstantie aan
  • Converteert BSON-documenttypen per document naar JavaScript-typen
  • Evalueert JavaScript-code in de tolk per document
  • Cast JavaScript true|false terug als resultaat per document

Gezien het feit dat $regex ( maar met een hoofdletterongevoelige overeenkomst die niet optimaal is ) dezelfde bewerkingen uitvoert maar de "pcre" C-bibliotheek native gebruikt zonder conversie en herschikking per document, dan is het duidelijk de verstandige keuze van de twee.




  1. beperk en sorteer elke groep op in mongoDB met behulp van aggregatie

  2. Hoe kan ik JSON automatisch toewijzen aan een case-klasse wanneer een veld een scala-trefwoord is?

  3. Een nodejs-app implementeren op het Google Cloud-platform

  4. mongodb vork in windows