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 a
và b
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 .