sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB $isNumber

Från MongoDB 4.4 kan du använda $isNumber aggregeringspipeline-operatör för att kontrollera om ett värde är ett tal eller inte.

Den accepterar alla giltiga uttryck och returnerar true om uttrycket är ett tal, false om det inte är det.

Specifikt $isNumber kontrollerar om uttrycket löser sig till någon av följande BSON-typer:

  • Integer
  • Decimal
  • Double
  • Long

Den returnerar true om det gör det.

Den returnerar false om uttrycket löser sig till någon annan BSON-typ, null , eller ett fält som saknas.

Exempel

Anta att vi har en samling som heter dogs med följande dokument:

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

Vi kan använda följande kod för att se vilka fält som är numeriska:

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

Resultat:

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

Vi kan se att _id och weight fälten är numeriska, men name fältet är inte (det är en sträng).

Exempel 2

Här är ett annat exempel som innehåller olika fält med olika BSON-typer.

Anta att vi har en samling som heter types med följande 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
	]
}

För syftet med den här artikeln har jag döpt varje fält för att återspegla dess BSON-typ.

Vi kan nu använda följande kod för att returnera antingen true eller false för varje fält, beroende på om fältet är ett nummer eller inte:

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. mongodb få _id som sträng i sökfrågan

  2. JSON.NET cast-fel vid serialisering av Mongo ObjectId

  3. Grundläggande överväganden för att ta en MongoDB-säkerhetskopia

  4. DevOps Open-Source Database Audit Manual - Allt du bör veta