MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

MongoDB $objectToArray

Di MongoDB, $objectToArray operator pipa agregasi mengonversi dokumen menjadi larik.

Array yang dihasilkan oleh $objectToArray berisi elemen untuk setiap pasangan bidang/nilai dalam dokumen asli. Setiap elemen adalah dokumen yang berisi k bidang dan v bidang:

  • k field berisi nama field dalam dokumen asli.
  • v field berisi nilai field dalam dokumen asli.

Contoh

Misalkan kita memiliki koleksi yang disebut dogs dengan dokumen berikut:

{
	"_id" : 1,
	"name" : "Fetch",
	"specs" : {
		"height" : 400,
		"weight" : 55,
		"color" : "brown"
	}
}

Kita dapat menggunakan $objectToArray operator untuk mengembalikan specs bidang sebagai larik:

db.dogs.aggregate(
   [
     { $match: { _id: { $in: [ 1 ] } } },
     { $project: { 
        _id: 0,
        result: { $objectToArray: "$specs" } } 
         }
   ]
).pretty()

Hasil:

{
	"result" : [
		{
			"k" : "height",
			"v" : 400
		},
		{
			"k" : "weight",
			"v" : 55
		},
		{
			"k" : "color",
			"v" : "brown"
		}
	]
}

Dokumen Bertingkat

$objectToArray operator hanya berlaku untuk bidang tingkat atas. Itu tidak berlaku secara rekursif untuk dokumen yang disematkan.

Misalkan kita memiliki dokumen seperti ini:

{
	"_id" : 2,
	"name" : "Wag",
	"specs" : {
		"height" : 50,
		"weight" : 5,
		"color" : {
			"eyes" : "brown",
			"coat" : "black"
		}
	}
}

Inilah yang terjadi ketika kita menerapkan $objectToArray ke dokumen itu:

db.dogs.aggregate(
   [
     { $match: { _id: { $in: [ 2 ] } } },
     { $project: { 
        _id: 0,
        result: { $objectToArray: "$specs" } } 
         }
   ]
).pretty()

Hasil:

{
	"result" : [
		{
			"k" : "height",
			"v" : 50
		},
		{
			"k" : "weight",
			"v" : 5
		},
		{
			"k" : "color",
			"v" : {
				"eyes" : "brown",
				"coat" : "black"
			}
		}
	]
}

Dalam hal ini, dokumen tingkat atas diubah menjadi k /v format, tetapi dokumen yang disematkan tetap sama seperti di dokumen aslinya.

Jenis Salah

Argumen yang diberikan ke $objectToArray dapat berupa ekspresi apa pun yang valid selama ekspresi tersebut ditetapkan ke objek dokumen.

Jika argumen tidak diselesaikan ke objek dokumen, terjadi kesalahan.

Misalkan kita memiliki dokumen berikut:

{ "_id" : 3, "name" : "Fetch", "specs" : "None" }

specs bidang berisi string.

Inilah yang terjadi ketika kita menerapkan $objectToArray ke dokumen itu:

db.dogs.aggregate(
   [
     { $match: { _id: { $in: [ 3 ] } } },
     { $project: { 
        _id: 0,
        result: { $objectToArray: "$specs" } } 
         }
   ]
)

Hasil:

uncaught exception: Error: command failed: {
	"ok" : 0,
	"errmsg" : "$objectToArray requires a document input, found: string",
	"code" : 40390,
	"codeName" : "Location40390"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:639:17
[email protected]/mongo/shell/assert.js:729:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1058:12
@(shell):1:1

Seperti yang dinyatakan kesalahan, $objectToArray requires a document input .

Nilai Null

Memberikan null menghasilkan null .

Misalkan kita memiliki dokumen berikut:

{ "_id" : 4, "name" : "Fetch", "specs" : null }

Dan kami menerapkan $objectToArray :

db.dogs.aggregate(
   [
     { $match: { _id: { $in: [ 4 ] } } },
     { $project: { 
        _id: 0,
        result: { $objectToArray: "$specs" } } 
         }
   ]
)

Hasil:

{ "result" : null }

Bidang Tidak Ada

Jika kolom tidak ada, hasilnya adalah null .

Misalkan kita memiliki dokumen berikut:

{ "_id" : 5, "name" : "Fetch" }

Dan kami menerapkan $objectToArray :

db.dogs.aggregate(
   [
     { $match: { _id: { $in: [ 5 ] } } },
     { $project: { 
        _id: 0,
        result: { $objectToArray: "$specs" } } 
         }
   ]
)

Hasil:

{ "result" : null }


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB:Performa Pengurangan Peta yang Mengerikan

  2. Dapatkan hanya bidang tertentu di MongoDB dengan C#

  3. Kelompokkan menurut jumlah mongodb

  4. mongodb temukan dengan membandingkan nilai bidang

  5. Hubungan indeks/RAM MongoDB