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

MongoDB $ concatArrays

Trong MongoDB, $concatArrays toán tử đường ống tổng hợp nối hai hoặc nhiều mảng và trả về mảng đã nối.

Ví dụ

Giả sử chúng ta có một tập hợp được gọi là data với tài liệu sau:

{ "_id" : 1, "a" : [ 1, 2, 3 ], "b" : [ 4, 5, 6 ] }

Chúng ta có thể sử dụng $concatArrays toán tử để nối mảng của a trường với mảng b lĩnh vực:

db.data.aggregate([
    { $match: { _id: 1 } },
    { $project: { 
        _id: 0,
        result: { $concatArrays: [ "$a", "$b" ] }
        }
    }
])

Kết quả:

{ "result" : [ 1, 2, 3, 4, 5, 6 ] }

Mảng trống

Nối một mảng với một mảng trống không thay đổi bất cứ điều gì.

Giả sử bộ sưu tập của chúng tôi cũng chứa tài liệu sau:

{ "_id" : 2, "a" : [ 1, 2, 3 ], "b" : [ ] }

Hãy áp dụng $concatArrays tới đó ::

db.data.aggregate([
    { $match: { _id: 2 } },
    { $project: { 
        _id: 0,
        result: { $concatArrays: [ "$a", "$b" ] }
        }
    }
])

Kết quả:

{ "result" : [ 1, 2, 3 ] }

Chúng tôi kết thúc với mảng đầu tiên mà không có bất kỳ thay đổi nào.

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

Cố gắng nối một trường với một trường không tồn tại trả về null .

Hãy tưởng tượng bộ sưu tập của chúng tôi cũng chứa tài liệu sau:

{ "_id" : 3, "a" : [ 1, 2, 3 ] }

Đây là những gì sẽ xảy ra khi chúng tôi áp dụng $concatArrays tới a trường và trường không tồn tại:

db.data.aggregate([
    { $match: { _id: 3 } },
    { $project: { 
        _id: 0,
        result: { $concatArrays: [ "$a", "$b" ] }
        }
    }
])

Kết quả:

{ "result" : null }

Các loại dữ liệu khác

Mỗi biểu thức được cung cấp cho $concatArrays 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 mảng.

Nếu nó không giải quyết được một mảng, thì một lỗi sẽ được trả về.

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

{ "_id" : 4, "a" : [ 1, 2, 3 ], "b" : 4 }

Đây là những gì sẽ xảy ra nếu chúng tôi cố gắng nối ab lĩnh vực:

db.data.aggregate([
    { $match: { _id: 4 } },
    { $project: { 
        _id: 0,
        result: { $concatArrays: [ "$a", "$b" ] }
        }
    }
])

Kết quả:

Error: command failed: {
	"ok" : 0,
	"errmsg" : "$concatArrays only supports arrays, not double",
	"code" : 28664,
	"codeName" : "Location28664"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:618:17
[email protected]/mongo/shell/assert.js:708:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1046:12
@(shell):1:1

Trong ví dụ này, tôi đã cố gắng nối một mảng với một kép nhưng tôi gặp lỗi cho biết $ concatArrays chỉ hỗ trợ mảng chứ không phải kép .


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Sử dụng MongoDB làm Nguồn dữ liệu trong GoLang

  2. Bất kỳ lý do chi tiết và cụ thể nào cho việc Tại sao MongoDB nhanh hơn nhiều so với SQL DBs?

  3. Nhận thông báo cho các tài liệu đã thay đổi trong mongodb

  4. Mã hóa MongoDB Data-at-Rest

  5. Mongoose lỗi khóa trùng lặp với nâng cấp