Powiedzmy dokument jest:MongoDB: jak policzyć liczbę kluczy w dokumencie?
{
a: 1,
b: 1,
c: 2,
....
z: 2
}
jaki sposób mogę policzyć liczbę kluczy w takim dokumencie?
Dziękujemy
Powiedzmy dokument jest:MongoDB: jak policzyć liczbę kluczy w dokumencie?
{
a: 1,
b: 1,
c: 2,
....
z: 2
}
jaki sposób mogę policzyć liczbę kluczy w takim dokumencie?
Dziękujemy
Nie ma wbudowanego polecenia do tego. Pobierz ten dokument i policz klucze samodzielnie.
Sergio ma rację, musisz to zrobić poza mangiem.
można zrobić coś takiego:
var count = 0;
for(k in obj) {count++;}
print(count);
W Mongo (jak w większości rozwiązań NoSQL) to zwykle dobry pomysł, aby wstępnie obliczyć te wartości, jeśli chcesz zrobić zapytań na nich później (np " gdzie liczba różnych klawiszy> 12 "), więc może powinieneś rozważyć dodanie nowego pola" keyCount ", które zwiększasz za każdym razem, gdy dodawany jest nowy klucz.
Jeśli jesteś w konsoli Mongo, możesz napisać javascript, aby to zrobić.
doc = db.coll.findOne({}); nKeys =0; for(k in doc){nKeys ++;} print(nKeys);
To nadal będzie uważane za "poza mongo".
Możesz także po prostu zrobić 'nKeys = Object.keys (doc) .length;' –
Całkiem możliwe, jeśli korzystasz z MongoDB 3.6 i nowszej wersji ze środowiska agregacji. Należy użyć operatora w potoku agregacji, aby przekonwertować dokument na tablicę. Tablica zwracana zawiera element dla każdej pary pól/wartości w oryginalnym dokumencie. Każdy element w tablicy zwrotów jest dokumentem, który zawiera dwa pola k
i v
.
Odwołanie do katalogu głównego dokumentu jest możliwe dzięki zmiennej systemowej, która odwołuje się do aktualnie przetwarzanego dokumentu najwyższego poziomu na etapie potoku agregacji.
Na coraz tablicę, można następnie wykorzystać użycie $addFields
etapie rurociągu, aby utworzyć pole, które przechowuje się liczy i rzeczywista liczba pochodzi z wykorzystaniem operatora $size
.
Wszystko to można zrobić w jednym rurociągiem przez zagnieżdżanie wyrażeń następująco:
db.collection.aggregate([
{
"$addFields": {
"count": {
"$size": {
"$objectToArray": "$$ROOT"
}
}
}
}
])
Przykład Wyjście
{
"_id" : ObjectId("5a7cd94520a31e44e0e7e282"),
"a" : 1.0,
"b" : 1.0,
"c" : 2.0,
"z" : 2.0,
"count" : 5
}
Aby wykluczyć pole _id
, można użyć operatora $filter
jako:
db.collection.aggregate([
{
"$addFields": {
"count": {
"$size": {
"$filter": {
"input": { "$objectToArray": "$$ROOT" },
"as": "el",
"cond": { "$ne": [ "$$el.k", "_id" ] }
}
}
}
}
}
])
Dlaczego to się dzieje? To dość uzasadnione pytanie. Awans. –