sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB:jak spočítat počet klíčů v dokumentu?

Docela možné, pokud používáte MongoDB 3.6 a novější prostřednictvím agregačního rámce. Použijte $objectToArray operátor v rámci agregačního kanálu pro převod dokumentu na pole. Návratové pole obsahuje prvek pro každý pár pole/hodnota v původním dokumentu. Každý prvek v poli návratu je dokument, který obsahuje dvě pole k a v .

Odkaz na kořen dokumentu je možný prostřednictvím $$ROOT systémová proměnná, která odkazuje na dokument nejvyšší úrovně aktuálně zpracovávaný ve fázi agregačního kanálu.

Po získání pole pak můžete využít použití $addFields krok kanálu k vytvoření pole, které obsahuje počty a skutečný počet je odvozen pomocí $size operátor.

To vše lze provést v jediném kanálu vnořením výrazů následovně:

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

Ukázkový výstup

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

Chcete-li vyloučit _id můžete použít $filter operátor jako:

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

nebo jak navrhuje 0zkr PM, jednoduše přidejte $project krok potrubí na začátku:

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


  1. Nelze najít dokumenty vyhledávající podle ObjectId pomocí Mongoose

  2. Přesnost příkazu redis dbsize

  3. Průsečík Mongodb s časovým rozsahem

  4. Ukládání do mezipaměti v Django s Redis