MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

MongoDB $ objectToArray

Trong MongoDB, $objectToArray nhà điều hành đường ống tổng hợp chuyển đổi một tài liệu thành một mảng.

Mảng được tạo bởi $objectToArray chứa một phần tử cho mỗi cặp trường / giá trị trong tài liệu gốc. Mỗi phần tử là một tài liệu chứa k và một trường v lĩnh vực:

  • k trường chứa tên trường trong tài liệu gốc.
  • v trường chứa giá trị của trường trong tài liệu gốc.

Ví dụ

Giả sử chúng ta có một bộ sưu tập có tên là dogs với tài liệu sau:

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

Chúng ta có thể sử dụng $objectToArray toán tử để trả về specs trường dưới dạng một mảng:

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

Kết quả:

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

Tài liệu lồng nhau

$objectToArray toán tử chỉ áp dụng cho trường cấp cao nhất. Nó không áp dụng đệ quy cho bất kỳ tài liệu nhúng nào.

Giả sử chúng ta có một tài liệu như sau:

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

Đây là những gì sẽ xảy ra khi chúng tôi áp dụng $objectToArray vào tài liệu đó:

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

Kết quả:

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

Trong trường hợp này, tài liệu cấp cao nhất được chuyển đổi thành k / v nhưng tài liệu nhúng vẫn giống như trong tài liệu gốc.

Loại sai

Đối số được cung cấp cho $objectToArray có thể là bất kỳ biểu thức hợp lệ nào miễn là nó phân giải thành một đối tượng tài liệu.

Nếu đối số không giải quyết được đối tượng tài liệu, thì sẽ xảy ra lỗi.

Giả sử chúng ta có tài liệu sau:

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

specs trường chứa một chuỗi.

Đây là những gì sẽ xảy ra khi chúng tôi áp dụng $objectToArray vào tài liệu đó:

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

Kết quả:

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

Khi lỗi nêu rõ, $objectToArray requires a document input .

Giá trị rỗng

Cung cấp null kết quả là null .

Giả sử chúng ta có tài liệu sau:

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

Và chúng tôi áp dụng $objectToArray :

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

Kết quả:

{ "result" : null }

Các trường bị thiếu

Nếu trường bị thiếu, kết quả là null .

Giả sử chúng ta có tài liệu sau:

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

Và chúng tôi áp dụng $objectToArray :

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

Kết quả:

{ "result" : null }


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. SQL LPAD ()

  2. Cú pháp truy vấn riêng biệt trong C # MongoDB

  3. Cách cập nhật nhiều phần tử mảng trong mongodb

  4. MongoDB $ toLower

  5. chỉ mục thưa thớt và giá trị null trong mongo