sql >> Database >  >> NoSQL >> MongoDB

Selecteer een document met een bepaald sleutelwaardepaar maar zonder een ander sleutelwaardepaar

Uw zoekpoging gebruikt tweemaal dezelfde "sleutel". Je kunt dat niet doen in een objectstructuur, omdat je in wezen de waarde van dezelfde sleutel "overdrijft". Dus de eigenlijke zoekopdracht die in overweging wordt genomen, is slechts de "tweede" voorwaarde voor die sleutel.

Dus als je meerdere voorwaarden voor dezelfde sleutel wilt hebben, gebruik dan de $and operator:

db.collection.aggregate([
    { "$match": {
        "$and": [
            { "genericParams.key": { "$exists": true, "$ne": "manual_funds_processed" } },
            { "genericParams.key": "third_sms_email_time" }
        ] 
    },
    // other stages
})

Of aangezien alle MongoDB-voorwaarden standaard "en" -argumenten zijn, kunt u ook $eq in dit geval:

db.collection.aggregate([
    { "$match": {
        "genericParams.key": { 
            "$ne": "manual_refund_processed", 
            "$eq": "third_sms_email_time"
        }
    }},
    // other stages
])

Hierbij opmerkend dat er niets bijzonders is aan .aggregate() hier zelf, omdat het alleen het basis "query"-gedeelte is dat het werk van documentselectie doet.

Merk ook op dat met een "positieve" voorwaarde (de $eq ) is het niet echt nodig om de $exists . te gebruiken aangezien je al aan het testen bent dat in ieder geval dat element moet overeenkomen.




  1. Preventieve beveiliging met auditlogging voor MongoDB

  2. Hoe update ik velden van documenten in mongo db met behulp van het java-stuurprogramma?

  3. Hoe nscanned in mangoest te vinden?

  4. Fout bij verbinden met Atlas Free Cluster (MongoDB)