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

MongoDB $toBool

От MongoDB 4.0 можете да използвате $toBool оператор на конвейер за агрегиране за преобразуване на стойност в булева.

Когато конвертирате стойност в булева, резултатът ще бъде true или false , в зависимост от въведената стойност.

Обикновено за числови стойности това ще върне false ако стойността е нула (0 ) и true за всяка друга стойност.

За стойностите на string, ObjectId и Date винаги ще връща true .

Пример

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

{
	"_id" : ObjectId("60133e50c8eb4369cf6ad9d9"),
	"double" : 123.75,
	"string" : "123",
	"boolean" : true,
	"date" : ISODate("2020-12-31T23:30:15.123Z"),
	"integer" : 123,
	"long" : NumberLong(123),
	"decimal" : NumberDecimal("123.75")
}
{
	"_id" : ObjectId("60133e50c8eb4369cf6ad9da"),
	"double" : 0,
	"string" : "",
	"boolean" : false,
	"date" : null,
	"integer" : 0,
	"long" : NumberLong(0),
	"decimal" : NumberDecimal("0.0")
}

Можем да използваме $toBool оператор за преобразуване на всички тези типове в булеви. Ако входът е булев, тогава той просто връща булев.

db.types.aggregate(
  [
    {
      $project:
        { 
          _id: 0,
          objectId: { $toBool: "$_id" },
          double: { $toBool: "$double" },
          string: { $toBool: "$string" },
          boolean: { $toBool: "$boolean" },
          date: { $toBool: "$date" },
          integer: { $toBool: "$integer" },
          long: { $toBool: "$long" },
          decimal: { $toBool: "$decimal" }
        }
    }
  ]
).pretty()

Резултат:

{
	"objectId" : true,
	"double" : true,
	"string" : true,
	"boolean" : true,
	"date" : true,
	"integer" : true,
	"long" : true,
	"decimal" : true
}
{
	"objectId" : true,
	"double" : false,
	"string" : true,
	"boolean" : false,
	"date" : null,
	"integer" : false,
	"long" : false,
	"decimal" : false
}

Можем да видим, че всички стойности в първия документ върнаха true , но много във втория документ върнаха false . Също така стойността на датата върна null защото беше null за начало.

Грешки

Ако срещнете грешки, опитайте да използвате $convert оператор вместо $toBool . $convert операторът ви позволява да обработвате грешки, без да засягате цялата операция на агрегиране.

$toBool операторът е еквивалент на използването на $convert оператор за преобразуване на стойност в булева.

Ето пример за използване на $convert за преобразуване на низ в булев::

db.types.aggregate(
  [
    {
      $project:
        { 
          _id: 0,
          result: 
          {
            $convert: { 
              input: "$string", 
              to: "bool",
              onError: "An error occurred",
              onNull: "Input was null or empty" 
            }
          }
        }
    }
  ]
)

Резултат:

{ "result" : true } 

Вижте MongoDB $convert за още примери.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да стартирам Mongo DB от Windows?

  2. Включете всички съществуващи полета и добавете нови полета към документа

  3. Защо mongoose винаги добавя s в края на името на моята колекция

  4. Филтър с редовен израз MongoDB C# драйвер

  5. Как да направя вмъкване, ако не съществува друго актуализация с mongoengine?