sql >> Database >  >> NoSQL >> MongoDB

MongoDB $isNumber

Vanaf MongoDB 4.4 kunt u de $isNumber . gebruiken aggregatiepijplijnoperator om te controleren of een waarde een getal is.

Het accepteert elke geldige uitdrukking en retourneert true als de uitdrukking een getal is, false als dat niet het geval is.

In het bijzonder $isNumber controleert of de uitdrukking wordt omgezet in een van de volgende BSON-typen:

  • Integer
  • Decimal
  • Double
  • Long

Het retourneert true zo ja.

Het retourneert false als de uitdrukking wordt omgezet in een ander BSON-type, null , of een ontbrekend veld.

Voorbeeld

Stel dat we een verzameling hebben met de naam dogs met het volgende document:

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

We kunnen de volgende code gebruiken om te zien welke velden numeriek zijn:

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

Resultaat:

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

We kunnen zien dat de _id en weight velden zijn numeriek, maar de name veld is niet (het is een string).

Voorbeeld 2

Hier is nog een voorbeeld dat verschillende velden van verschillende BSON-typen bevat.

Stel dat we een verzameling hebben met de naam types met het volgende document:

{
	"_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
	]
}

Voor het doel van dit artikel heb ik elk veld een naam gegeven om het BSON-type weer te geven.

We kunnen nu de volgende code gebruiken om true . te retourneren of false voor elk veld, afhankelijk van of het veld een nummer is:

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()

Resultaat:

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

  1. Redis-interacties in javascript stoppen met Sinon

  2. mongodb get _id als string in zoekquery

  3. mongo kopiëren van de ene collectie naar de andere (op dezelfde db)

  4. Gegevens migreren in MongoDB