permette di dire un documento è:MongoDB: come contare il numero di chiavi in un documento?
{
a: 1,
b: 1,
c: 2,
....
z: 2
}
Come posso contare il numero di chiavi in tale documento?
Grazie
permette di dire un documento è:MongoDB: come contare il numero di chiavi in un documento?
{
a: 1,
b: 1,
c: 2,
....
z: 2
}
Come posso contare il numero di chiavi in tale documento?
Grazie
Non esiste un comando predefinito per questo. Scarica questo documento e conta i tasti tu stesso.
Sergio ha ragione, devi farlo fuori da mongo.
Si può fare qualcosa di simile:
var count = 0;
for(k in obj) {count++;}
print(count);
In Mongo (come nella maggior parte delle soluzioni NoSQL) di solito è una buona idea di pre-calcolare tali valori se si vuole fare domande su di loro in seguito (ad esempio " dove il numero di chiavi diverse> 12 "), quindi forse dovresti considerare di aggiungere un nuovo campo" keyCount "che incrementerai ogni volta che viene aggiunta una nuova chiave.
Se si è in console Mongo, è possibile scrivere javascript per farlo.
doc = db.coll.findOne({}); nKeys =0; for(k in doc){nKeys ++;} print(nKeys);
Questo sarà ancora essere considerato "fuori dal mongo" però.
Puoi anche solo fare 'nKeys = Object.keys (doc) .length;' –
Abbastanza possibile se si utilizza MongoDB 3.6 e più recente attraverso il framework di aggregazione. Utilizzare l'operatore $objectToArray
all'interno di una pipeline di aggregazione per convertire il documento in una matrice. La matrice di restituzione contiene un elemento per ogni coppia campo/valore nel documento originale. Ogni elemento nell'array di restituzione è un documento che contiene due campi k
e v
.
Il riferimento per il root del documento è reso possibile dalla variabile di sistema $$ROOT
che fa riferimento al documento di livello superiore attualmente in fase di elaborazione nella fase di aggregazione della pipeline.
Su come ottenere la matrice, è possibile sfruttare l'uso di $addFields
passo pipeline per creare un campo che tiene i conti e il conteggio effettivo è determinato con l'utilizzo dell'operatore $size
.
Tutto questo può essere fatto in un unico gasdotto mediante la nidificazione delle espressioni come segue:
db.collection.aggregate([
{
"$addFields": {
"count": {
"$size": {
"$objectToArray": "$$ROOT"
}
}
}
}
])
Esempio di output
{
"_id" : ObjectId("5a7cd94520a31e44e0e7e282"),
"a" : 1.0,
"b" : 1.0,
"c" : 2.0,
"z" : 2.0,
"count" : 5
}
escludere il settore _id
, è possibile utilizzare l'$filter
operatore come:
db.collection.aggregate([
{
"$addFields": {
"count": {
"$size": {
"$filter": {
"input": { "$objectToArray": "$$ROOT" },
"as": "el",
"cond": { "$ne": [ "$$el.k", "_id" ] }
}
}
}
}
}
])
Perché si ottiene un downvote? È una domanda abbastanza legittima. Upvoting. –