Trong MongoDB, $split
toán tử đường ống tổng hợp chia một chuỗi thành một mảng các chuỗi con dựa trên dấu phân cách.
Dấu phân tách được xóa khỏi chuỗi và các chuỗi con được thêm dưới dạng phần tử vào mảng.
Để sử dụng $split
, bạn chỉ định chuỗi và dấu phân cách.
Nếu không tìm thấy dấu phân tách trong chuỗi, thì chuỗi gốc sẽ được trả về dưới dạng mục duy nhất trong mảng.
Ví dụ 1
Giả sử chúng ta có một bộ sưu tập được gọi là test
với tài liệu sau:
{ "_id" : 1, "data" : "March-18-2020" }
Chúng ta có thể sử dụng $split
để tách data
trường ở dấu gạch ngang.
db.test.aggregate(
[
{ $match: { _id: 1 } },
{
$project:
{
_id: 0,
result: { $split: [ "$data", "-" ] }
}
}
]
)
Kết quả:
{ "result" : [ "March", "18", "2020" ] }
Ví dụ 2
Giả sử chúng ta có tài liệu sau:
{ "_id" : 2, "data" : "Sydney, Australia, NSW 2000" }
Chúng ta có thể sử dụng $split
để tách trường dữ liệu dựa trên dấu phẩy và dấu cách:
db.test.aggregate(
[
{ $match: { _id: 2 } },
{
$project:
{
_id: 0,
result: { $split: [ "$data", ", " ] }
}
}
]
)
Kết quả:
{ "result" : [ "Sydney", "Australia", "NSW 2000" ] }
Ví dụ 3
Đây là một ví dụ khác. Lần này chúng ta sẽ chia chuỗi dựa trên khoảng cách giữa mỗi từ.
Tài liệu mẫu:
{ "_id" : 3, "data" : "Homer Jay Einstein" }
Hãy chia nó ra:
db.test.aggregate(
[
{ $match: { _id: 3 } },
{
$project:
{
_id: 0,
result: { $split: [ "$data", " " ] }
}
}
]
)
Kết quả:
{ "result" : [ "Homer", "Jay", "Einstein" ] }
Loại dữ liệu sai
Hai đối số phải là chuỗi. Cung cấp loại dữ liệu sai dẫn đến lỗi.
Ví dụ:
db.test.aggregate(
[
{ $match: { _id: 1 } },
{
$project:
{
_id: 0,
result: { $split: [ "$data", 18 ] }
}
}
]
)
Kết quả:
Error: command failed: { "ok" : 0, "errmsg" : "$split requires an expression that evaluates to a string as a second argument, found: double", "code" : 40086, "codeName" : "Location40086" } : 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
Như thông báo lỗi nêu rõ, $split requires an expression that evaluates to a string as a second argument, found: double
.