sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB $isNumber

Fra MongoDB 4.4 kan du bruge $isNumber aggregeringspipeline-operatør for at kontrollere, om en værdi er et tal eller ej.

Det accepterer ethvert gyldigt udtryk og returnerer true hvis udtrykket er et tal, false hvis det ikke er.

Specifikt $isNumber kontrollerer, om udtrykket løses til en af ​​følgende BSON-typer:

  • Integer
  • Decimal
  • Double
  • Long

Det returnerer true hvis det gør.

Det returnerer false hvis udtrykket løses til en anden BSON-type, null , eller et manglende felt.

Eksempel

Antag, at vi har en samling kaldet dogs med følgende dokument:

{ "_id" : 1, "name" : "Fetch", "weight" : 30 } 

Vi kan bruge følgende kode til at se, hvilke felter der er numeriske:

db.dogs.aggregate(
  [
    {
      $project:
        { 
          _id: { $isNumber: "$_id" },
          name: { $isNumber: "$name" },
          weight: { $isNumber: "$weight" }
        }
    }
  ]
)

Resultat:

{ "_id" : true, "name" : false, "weight" : true }

Vi kan se, at _id og weight felter er numeriske, men name felt er ikke (det er en streng).

Eksempel 2

Her er et andet eksempel, der indeholder forskellige felter med forskellige BSON-typer.

Antag, at vi har en samling kaldet types med følgende dokument:

{
	"_id" : ObjectId("601738d7c8eb4369cf6ad9de"),
	"double" : 123.75,
	"string" : "123",
	"boolean" : true,
	"date" : ISODate("2020-12-31T23:30:15.123Z"),
	"integer" : 123,
	"long" : NumberLong(123),
	"decimal" : NumberDecimal("123.75"),
	"object" : {
		"a" : 1
	},
	"array" : [
		1,
		2,
		3
	]
}

Til formålet med denne artikel har jeg navngivet hvert felt for at afspejle dens BSON-type.

Vi kan nu bruge følgende kode til at returnere enten true eller false for hvert felt, afhængigt af om feltet er et tal eller ej:

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

Resultat:

{
	"_id" : false,
	"double" : true,
	"string" : false,
	"boolean" : false,
	"date" : false,
	"integer" : true,
	"long" : true,
	"decimal" : true,
	"object" : false,
	"array" : false
}

  1. SQL COALESCE() Forklaret

  2. Sådan fjerner du et element fra et dobbelt indlejret array i et MongoDB-dokument.

  3. Hvad er den korrekte måde at indeksere i MongoDB, når der findes en stor kombination af felter

  4. MongoDB find()