sql >> Database >  >> NoSQL >> MongoDB

MongoDB:match gebruiken met invoerdocumentvariabelen

Betekent dit dat als u invoervariabelen gebruikt in een $lookuppipeline, u $expr

moet gebruiken

Ja correct, standaard in filters, d.w.z.; in filtergedeelte van .find() of in $match aggregatiefase kunt u geen bestaand veld in het document gebruiken.

Als u de waarde van het bestaande veld in uw queryfilter al moet gebruiken, moet u de aggregatiepijplijn gebruiken, dus om de aggregatiepijplijn in .find() te gebruiken of in $match je moet je filterquery inpakken met $expr. Dezelfde manier om toegang te krijgen tot lokale variabelen is gemaakt met let van $lookup filter in $match moet worden ingepakt door $expr .

Laten we eens kijken naar onderstaand voorbeeld:

Voorbeelddocumenten:

[
  {
    "key": 1,
    "value": 2
  },
  {
    "key": 2,
    "value": 4
  },
  {
    "key": 5,
    "value": 5
  }
]

Vraag:

 db.collection.find({ key: { $gt: 1 }, value: { $gt: 4 } })

    Or

 db.collection.aggregate([ { $match: { key: { $gt: 1 }, value: { $gt: 4 } } } ])

Testen: mongospeeltuin

Als u de bovenstaande vraag ziet, voert u beide 1 . in &4 worden doorgegeven aan de zoekopdracht, maar controleer hieronder waar u probeert te matchen met key veld ==value veld - het werkt niet :

db.collection.aggregate([ { $match: { key: { $eq: "$value" } } } ])

Test : mongospeeltuin

Hierboven, aangezien u twee bestaande velden vergelijkt, kunt u dat niet doen, omdat u op zoek bent naar documenten met key veldwaarde als string "$value" . Dus om te zeggen dat het geen string is, is het eigenlijk een verwijzing naar value veld moet u de $eq aggregatie-operator gebruiken in plaats van de $eq query-operator zoals hieronder:

 db.collection.aggregate([ { $match: { $expr: { $eq: [ "$key", "$value" ] } } } ])

Test : mongospeeltuin



  1. Gemiddelde aggregatiequery's in Meteor

  2. Krijgt u een verbindingsfout bij het gebruik van redis-trib.rb om een ​​cluster te maken?

  3. Wat zijn de onderliggende datastructuren die voor Redis worden gebruikt?

  4. Bulkupdate van documenten in MongoDB