MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB $log

В MongoDB, $log Операторът на конвейера за агрегиране изчислява регистрационния файл на число в посочената база и връща резултата като двоен.

Синтаксис

Синтаксисът е така:

{ $log:[ ,  ] } 

Къде:

  • <номер> може да бъде всеки валиден израз, който се разрешава до неотрицателно число.
  • може да бъде всеки валиден израз, който се разрешава до положително число, по-голямо от 1 .

Пример

Да предположим, че имаме колекция, наречена test със следния документ:

{ "_id" :1, "data" :0,5 }{ "_id" :2, "data" :20 }{ "_id" :3, "data" :200 }

Можем да използваме $log оператор за връщане на дневника база 10 на данните поле:

db.test.aggregate( [ { $match:{ _id:{ $in:[ 1, 2, 3 ] } } }, { $project:{ _id:0, данни:1, резултат:{ $log:[ "$data", 10 ] } } } ]) 

Резултат:

{ "данни" :0.5, "резултат" :-0.30102999566398114 }{ "данни" :20, "резултат" :1.301029995663981 }{ "данни" :200, "резултат" :922 301 806> 

Друг начин да направите това би било да използвате $log10 оператор.

Въпреки това, $log10 връща само логаритмичната база 10 на число. С $log , от друга страна, можем да посочим базата, която да използваме.

Ето пример за определяне на база от 16:

db.test.aggregate( [ { $match:{ _id:{ $in:[ 1, 2, 3 ] } } }, { $project:{ _id:0, данни:1, резултат:{ $log:[ "$data", 16 ] } } } ]) 

Резултат:

{ "данни" :0,5, "резултат" :-0,25 }{ "данни" :20, "резултат" :1,0804820237218407 }{ "данни" :200, "резултат" :1,910964047443 } 

Естествен логаритъм

Естественият логаритъм на числото е неговият логаритъм спрямо основата на математическата константа e , където e е ирационално и трансцендентно число, което започва с 2.7182818284590452353602874713527 и продължава завинаги.

Математическата константа e е известно още като числото на Ойлер.

В JavaScript можем да използваме Math.E да представлява e . Следователно можем да получим естествения логаритъм на число, като използваме Math.E като втори аргумент при използване на $log .

Пример:

db.test.aggregate( [ { $match:{ _id:{ $in:[ 1, 2, 3 ] } } }, { $project:{ _id:0, данни:1, резултат:{ $log:[ "$data", Math.E ] } } } ]) 

Резултат:

{ "данни" :0,5, "резултат" :-0,6931471805599453 }{ "данни" :20, "резултат" :2,995732273553991 }{ "данни" :200, "предварителен резултат" :837 }
 Имайте предвид, че MongoDB също има $ln оператор, който е специално проектиран да връща естествения логаритъм на число, така че може да ви е по-лесно да използвате този оператор вместо това. Вижте MongoDB $ln за пример.

Стойности извън обхвата

Както споменахме, $log операторът приема всеки валиден израз, който се разрешава до неотрицателно число. Стойности извън този диапазон ще доведат до грешка.

Да предположим, че добавяме следния документ към нашата колекция:

{ "_id" :4, "data" :-20 }

Нека стартираме $log оператор срещу този документ:

db.test.aggregate( [ { $match:{ _id:{ $in:[ 4 ] } } }, { $project:{ _id:0, данни:1, резултат:{ $log:[ "$data", 16 ] } } } ]) 

Резултат:

неуловено изключение:Грешка:командата е неуспешна:{ "ok" :0, "errmsg" :"Аргументът на $log трябва да е положително число, но е -20", "код" :28758, "codeName" :"Location28758 "} :неуспешен агрегат :[email protected]/mongo/shell/utils.js:25:[email protected]/mongo/shell/assert.js:18:[email protected]/mongo/shell/assert. js:639:[email protected]/mongo/shell/assert.js:729:[email protected]/mongo/shell/db.js:266:[email protected]/mongo/shell/collection.js:1058:12@(обвивка):1:1

Грешен тип данни

Предоставянето на грешен тип данни също ще доведе до грешка.

Да предположим, че добавяме следния документ към нашата колекция:

{ "_id" :5, "data" :"Десет" }

Нека стартираме $log оператор срещу този документ:

db.test.aggregate( [ { $match:{ _id:{ $in:[ 5 ] } } }, { $project:{ _id:0, данни:1, резултат:{ $log:[ "$data", 16 ] } } } ]) 

Резултат:

неуловено изключение:Грешка:командата е неуспешна:{ "ok" :0, "errmsg" :"Аргументът на $log трябва да е числов, а не низ", "код" :28756, "codeName" :"Location28756"} :агрегат неуспешно :[email protected]/mongo/shell/utils.js:25:[email protected]/mongo/shell/assert.js:18:[email protected]/mongo/shell/assert.js:639:[email protected]/mongo/shell/assert.js:729:[email protected]/mongo/shell/db.js:266:[email protected]/mongo/shell/collection.js:1058:12@ (обвивка):1:1

Предоставихме низ и така съобщението за грешка ни казва, че Аргументът на $log трябва да бъде числов, а не низ .

Нулеви стойности

Нулевите стойности връщат null когато използвате $log оператор.

Да предположим, че добавяме следния документ към нашата колекция:

{ "_id" :6, "data" :null }

Нека стартираме $log оператор срещу този документ:

db.test.aggregate( [ { $match:{ _id:{ $in:[ 6 ] } } }, { $project:{ _id:0, данни:1, резултат:{ $log:[ "$data", 16 ] } } } ]) 

Резултат:

{ "data" :null, "result" :null }

Можем да видим, че резултатът е null .

NaN стойности

Ако аргументът се разреши до NaN$log връща NaN .

Пример:

db.test.aggregate( [ { $match:{ _id:{ $in:[ 1 ] } } }, { $project:{ _id:0, данни:1, резултат:{ $log:[ "$data" * 1, 16 ] } } } ]) 

Резултат:

{ "данни" :0,5, "резултат" :NaN }

Несъществуващи полета

Ако $log операторът се прилага срещу поле, което не съществува, null се връща.

Пример:

db.test.aggregate( [ { $match:{ _id:{ $in:[ 1 ] } } }, { $project:{ _id:0, данни:1, резултат:{ $log:[ "$age", 16 ] } } } ]) 

Резултат:

{ "данни" :0.5, "резултат" :нула }

В този случай се опитахме да приложим $log срещу поле, наречено age , но това поле не съществува в документа и така получаваме null .


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Мога ли да заявя MongoDB ObjectId по дата?

  2. MongoDB $round срещу $trunc:Каква е разликата?

  3. Как да премахна документи с помощта на Node.js Mongoose?

  4. 5 начина да получите милисекунди от дата в MongoDB

  5. класирайте класацията в монго с околните играчи