MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB $isArray

In MongoDB können Sie das $isArray verwenden Aggregations-Pipeline-Operator, um zu prüfen, ob ein Wert ein Array ist oder nicht.

Es akzeptiert jeden gültigen Ausdruck und gibt true zurück wenn der Ausdruck ein Array ist, false wenn nicht.

Beispiel

Angenommen, wir haben eine Sammlung namens test mit folgenden Dokumenten:

{ "_id" : 1, "data" : [ ] }
{ "_id" : 2, "data" : [ 1, 2, 3 ] }
{ "_id" : 3, "data" : [ "XS", "M", "L" ] }
{ "_id" : 4, "data" : 123 }
{ "_id" : 5, "data" : "Homer Jay" }

Wir können den folgenden Code verwenden, um die data zu überprüfen Feld für Arrays:

db.test.aggregate(
  [
     { $match: { _id: { $in: [ 1, 2, 3, 4, 5 ] } } },
    {
      $project:
        { 
          _id: 1,
          data: 1,
          result: { $isArray: "$data" }
        }
    }
  ]
)

Ergebnis:

{ "_id" : 1, "data" : [ ], "result" : true }
{ "_id" : 2, "data" : [ 1, 2, 3 ], "result" : true }
{ "_id" : 3, "data" : [ "XS", "M", "L" ], "result" : true }
{ "_id" : 4, "data" : 123, "result" : false }
{ "_id" : 5, "data" : "Homer Jay", "result" : false }

Wir können sehen, dass die ersten drei Dokumente Arrays enthalten und die anderen beiden nicht.

Außerdem können wir sehen, dass das erste Dokument ein leeres Array enthält. Das ist immer noch ein Array, also $isArray gibt true zurück .

Beispiel 2

Hier ist ein weiteres Beispiel, das verschiedene Felder mit unterschiedlichen BSON-Typen enthält.

Angenommen, wir haben eine Sammlung namens types mit folgendem 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 die Zwecke dieses Artikels habe ich jedes Feld so benannt, dass es seinen BSON-Typ widerspiegelt.

Wir können jetzt den folgenden Code verwenden, um entweder true zurückzugeben oder false für jedes Feld, abhängig davon, ob das Feld ein Array ist oder nicht:

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

Ergebnis:

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

Fehlendes Feld

Anwenden von $isArray zu einem Feld, das nicht existiert, ergibt false .

Nehmen wir unseren test an Sammlung enthält das folgende Dokument:

{ "_id" : 6 }

Und wir wenden $isArray an zu diesem Dokument:

db.test.aggregate(
  [
     { $match: { _id: { $in: [ 6 ] } } },
    {
      $project:
        { 
          _id: 1,
          data: 1,
          result: { $isArray: "$data" }
        }
    }
  ]
)

Ergebnis:

{ "_id" : 6, "result" : false }

Nullwerte

Anwenden von $isArray auf null gibt false zurück .

Nehmen wir unseren test an Sammlung enthält das folgende Dokument:

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

Und wir wenden $isArray an zu diesem Dokument:

db.test.aggregate(
  [
     { $match: { _id: { $in: [ 7 ] } } },
    {
      $project:
        { 
          _id: 1,
          data: 1,
          result: { $isArray: "$data" }
        }
    }
  ]
)

Ergebnis:

{ "_id" : 7, "data" : null, "result" : false }

Undefinierte Werte

Ebenso gibt die Bereitstellung undefinierter Werte false zurück .

Nehmen wir unseren test an Sammlung enthält das folgende Dokument:

{ "_id" : 8, "data" : undefined }

Wenden Sie $isArray an :

db.test.aggregate(
  [
     { $match: { _id: { $in: [ 8 ] } } },
    {
      $project:
        { 
          _id: 1,
          data: 1,
          result: { $isArray: "$data" }
        }
    }
  ]
)

Ergebnis:

{ "_id" : 8, "data" : undefined, "result" : false }