sql >> Database >  >> NoSQL >> MongoDB

MongoDB Tel het totale aantal echte en valse waarden voor documenten die overeenkomen met een zoekopdracht

Het aggregatieraamwerk is jouw antwoord:

db.collection.aggregate([
    { "$match": { "pollId": "hr4946-113" } },
    { "$group": {
        "_id": "$vote",
        "count": { "$sum": 1 }
    }}
])

In feite de $group operator verzamelt alle gegevens door "sleutel" en "groeperingsoperatoren" zoals $sum werken aan de waarden. In dit geval voegt u gewoon 1 . toe op de grenzen om een ​​telling aan te geven.

Geeft u:

{ "_id": true, "count": 1 }, 

Je kunt gek zijn en dat uitbreiden tot een enkel documentantwoord met behulp van de $cond operator om de veldwaarden voorwaardelijk te evalueren:

db.collection.aggregate([
    { "$match": { "pollId": "hr4946-113" } },
    { "$group": {
        "_id": "$vote",
        "count": { "$sum": 1 }
    }},
    { "$group": {
        "_id": null,
        "yesCount": {
            "$sum": {
                "$cond": [ "_id", 1, 0 ]
            }
        },
        "noCount": {
            "$sum": {
                "$cond": [ "_id", 0, 1 ]
            }
        }
    }},
    { "$project": { "_id": 0 } }
])

En het resultaat:

{ "yesCount": 1, "noCount": 0 }



  1. Hoe upsert met mongodb-java-driver

  2. mongoïde update-elementen binnen array

  3. Hoe grote getallen in MongoDB op te slaan met Node.js

  4. MongoDb :Hoe voeg ik een extra object toe aan de objectverzameling in golang?