Trong MongoDB, $rtrim
toán tử đường ống tổng hợp loại bỏ khoảng trắng khỏi phần cuối của một chuỗi. Điều này bao gồm ký tự rỗng.
Nó cũng có thể loại bỏ bất kỳ ký tự nào được chỉ định. Ví dụ:bạn có thể sử dụng nó để xóa tất cả các dấu chấm (.
), dấu chấm than (!
), v.v. từ cuối chuỗi.
Ví dụ
Giả sử chúng ta có một bộ sưu tập có tên là pets
với tài liệu sau:
{ "_id" : 1, "name" : "Wag!!!", "type" : " Dog ", "weight" : 20 }
Chúng ta có thể thấy rằng type
trường bao gồm khoảng trắng trên cả hai mặt của từ Dog
. Chúng ta có thể sử dụng $rtrim
toán tử để trả về trường đó với khoảng trắng bị xóa khỏi phần bên phải của chuỗi.
Ví dụ:
db.pets.aggregate([
{
$project: {
name: 1,
type: { $rtrim: { input: "$type" } }
}
}
])
Kết quả:
{ "_id" : 1, "name" : "Wag!!!", "type" : " Dog" }
Như mong đợi, loại type
trường đã được trả về mà không có khoảng trắng ở cuối. Khoảng trắng ở đầu vẫn còn.
Bạn cũng có thể sử dụng $ltrim
toán tử để cắt phần bên trái của chuỗi và $trim
toán tử để cắt cả hai bên của chuỗi.
Có khá nhiều ký tự mà MongoDB cho là ký tự khoảng trắng. Xem Các ký tự khoảng trắng trong MongoDB để biết danh sách đầy đủ.
Cắt bỏ các ký tự khác
$rtrim
toán tử chấp nhận chars
cho phép bạn chỉ định các ký tự cần cắt.
Ví dụ:
db.pets.aggregate([
{
$project: {
name: { $rtrim: { input: "$name", chars: "!" } }
}
}
])
Kết quả:
{ "_id" : 1, "name" : "Wag" }
Trong trường hợp này, chúng tôi đã bao gồm các ký tự type
tham số có dấu chấm than (!
), dẫn đến việc cả ba dấu chấm than đều bị xóa khỏi cuối chuỗi.
Cắt nhiều ký tự
Bạn có thể cắt nhiều ký tự bằng cách đưa tất cả chúng vào chars
đối số.
Ví dụ:
db.pets.aggregate([
{
$project: {
name: { $rtrim: { input: "$name", chars: "!g" } }
}
}
])
Kết quả:
{ "_id" : 1, "name" : "Wa" }
Trong trường hợp này, tôi đã cung cấp hai ký tự làm chars
của mình và hai trong số các ký tự đó tình cờ nằm ở cuối chuỗi. Do đó, hai ký tự đó đã được lược bớt.
Tuy nhiên, hãy cẩn thận khi làm điều này. Đây là những gì sẽ xảy ra khi tôi bao gồm tất cả các ký tự:
db.pets.aggregate([
{
$project: {
name: { $rtrim: { input: "$name", chars: "!agW" } }
}
}
])
Kết quả:
{ "_id" : 1, "name" : "" }
Toàn bộ chuỗi đã biến mất. Nó đã cắt không chỉ !
và g
khỏi chuỗi, nhưng nó cũng đã xóa W
và a
ký tự.
Số cắt tỉa
$rtrim
toán tử hoạt động trên chuỗi. Nếu chúng tôi cố gắng cắt weight
trường, chúng tôi gặp lỗi. Điều này là do weight
trường là một số, không phải là một chuỗi.
db.pets.aggregate([
{
$project: {
name: 1,
weight: { $rtrim: { input: "$weight", chars: "0" } }
}
}
])
Kết quả:
Error: command failed: { "ok" : 0, "errmsg" : "$rtrim requires its input to be a string, got 20 (of type double) instead.", "code" : 50699, "codeName" : "Location50699" } : 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
Lỗi cho chúng tôi biết rằng chúng tôi đã cung cấp mã kép và $rtrim
toán tử yêu cầu đầu vào của nó là một chuỗi.
Nếu chúng tôi thực sự muốn xóa số 0, trước tiên chúng tôi cần chuyển nó thành chuỗi. Chúng tôi có thể làm điều đó với $convert
hoặc $toString
nhà điều hành.
Ví dụ:
db.pets.aggregate([
{
$project: {
name: 1,
weight: { $rtrim: { input: { $toString: "$weight" }, chars: "0" } }
}
}
])
Kết quả:
{ "_id" : 1, "name" : "Wag!!!", "weight" : "2" }
Chúng tôi có thể lấy nó trở lại gấp đôi bằng cách sử dụng $convert
hoặc $toDouble
nhà điều hành.
Ví dụ đầy đủ:
db.pets.aggregate([
{
$project: {
name: 1,
weight: { $toDouble: { $rtrim: { input: { $toString: "$weight" }, chars: "0" } } }
}
}
])
Kết quả:
{ "_id" : 1, "name" : "Wag!!!", "weight" : 2 }