sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB:hvordan tæller man antallet af nøgler i et dokument?

Helt muligt, hvis du bruger MongoDB 3.6 og nyere gennem aggregeringsrammen. Brug $objectToArray operatør inden for en aggregeringspipeline for at konvertere dokumentet til et array. Returarrayet indeholder et element for hvert felt/værdipar i det originale dokument. Hvert element i returarrayet er et dokument, der indeholder to felter k og v .

Referencen til at roote dokumentet er muliggjort gennem $$ROOT systemvariabel, der refererer til dokumentet på øverste niveau, der i øjeblikket behandles i aggregeringspipelinestadiet.

Når du får arrayet, kan du så udnytte brugen af ​​$addFields pipeline-trin for at oprette et felt, der indeholder tællingerne, og det faktiske tæller udledes ved brug af $size operatør.

Alt dette kan gøres i en enkelt pipeline ved at indlejre udtrykkene som følger:

db.collection.aggregate([
    { "$addFields": {
        "count": {
            "$size": { 
                "$objectToArray": "$$ROOT"
            }
        }
    } }     
])

Eksempel på output

{
    "_id" : ObjectId("5a7cd94520a31e44e0e7e282"),
    "a" : 1.0,
    "b" : 1.0,
    "c" : 2.0,
    "z" : 2.0,
    "count" : 5
}

For at ekskludere _id feltet, kan du bruge $filter operatør som:

db.collection.aggregate([
    {
        "$addFields": {
            "count": {
                "$size": { 
                    "$filter": {
                        "input": { "$objectToArray": "$$ROOT" },
                        "as": "el",
                        "cond": { "$ne": [ "$$el.k", "_id" ] }
                    }
                }
            }
        }
    }     
])

eller som foreslået af 0zkr PM skal du blot tilføje et $project pipeline trin i begyndelsen:

db.collection.aggregate([
    { "$project": { "_id": 0 } },
    { "$addFields": {
        "count": {
            "$size": { 
                "$objectToArray": "$$ROOT"
            }
        }
    } }     
])


  1. ScaleGrid-hosting til Redis™ på din egen AWS-konto

  2. Hvordan ændrer man typen af ​​et felt?

  3. MongoDB:ubetingede opdateringer?

  4. Brug af flere Mongodb-databaser med Meteor.js