sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB:hur man räknar antalet nycklar i ett dokument?

Mycket möjligt om du använder MongoDB 3.6 och senare genom aggregeringsramverket. Använd $objectToArray operatör inom en aggregeringspipeline för att konvertera dokumentet till en array. Returmatrisen innehåller ett element för varje fält/värdepar i originaldokumentet. Varje element i returmatrisen är ett dokument som innehåller två fält k och v .

Referensen till rotdokumentet är möjlig genom $$ROOT systemvariabel som refererar till dokumentet på toppnivå som för närvarande bearbetas i aggregeringspipelinesteget.

När du skaffar arrayen kan du sedan utnyttja $addFields pipeline steg för att skapa ett fält som innehåller räkningarna och det faktiska antalet härleds med hjälp av $size operatör.

Allt detta kan göras i en enda pipeline genom att kapsla uttrycken enligt följande:

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

Exempel på utdata

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

För att utesluta _id kan du använda $filter operatör som:

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

eller som föreslagits av 0zkr PM helt enkelt lägg till ett $project pipeline steg i början:

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


  1. skjuta in objekt i arrayschema i Mongoose

  2. Meddelande om nyckelns utgång i redis python

  3. Hur installerar jag Predis på XAMPP-fönster?

  4. Så här gör du:Lägg till Cloudera Search i ditt kluster med Cloudera Manager