Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Nối chuỗi (Concatenate) các trường trong MongoDB

Để nối (concatenate) nhiều trường chuỗi thành một trường mới trong MongoDB, sử dụng toán tử $concat trong Aggregation Pipeline stage $project hoặc $addFields.

Tạo dữ liệu mẫu

> db.concatenateFieldsDemo.insertOne({"StudentFirstName":"Adam","StudentLastName":"Smith"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd6ebf46d78f205348bc62e") }
> db.concatenateFieldsDemo.insertOne({"StudentFirstName":"John","StudentLastName":"Doe"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd6ebfc6d78f205348bc62f") }
> db.concatenateFieldsDemo.insertOne({"StudentFirstName":"David","StudentLastName":"Miller"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd6ec376d78f205348bc630") }
> db.concatenateFieldsDemo.insertOne({"StudentFirstName":"Sam","StudentLastName":"Williams"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd6ec436d78f205348bc631") }

Xem dữ liệu

> db.concatenateFieldsDemo.find().pretty();

Nối trường với $concat

> db.concatenateFieldsDemo.aggregate([ 
  {$project:{
    "StudentFullName":{$concat: ["$StudentFirstName","/","$StudentLastName"]},
    "StudentFirstName":1,
    "StudentLastName":1
  }} 
]);

Kết quả


Giải thích

  • $concat: [expr1, expr2, ...]: Nối các biểu thức chuỗi theo thứ tự
  • "$StudentFirstName": Tham chiếu giá trị trường StudentFirstName
  • "/": Chuỗi phân tách cố định (literal string)
  • Kết quả lưu trong trường mới StudentFullName

Các biến thể hữu ích

1. Nối với khoảng trắng


2. Xử lý trường có thể null/missing


3. Dùng $addFields để giữ tất cả trường gốc

db.concatenateFieldsDemo.aggregate([
  {$addFields: {
    StudentFullName: {$concat: ["$StudentFirstName", " ", "$StudentLastName"]}
  }}
]);

4. Nối nhiều trường


Toán tử chuỗi khác trong Aggregation

Toán tửChức năng
$substr / $substrBytes / $substrCPCắt chuỗi con
$toLower / $toUpperChuyển chữ thường/hoa
$trim / $ltrim / $rtrimXóa khoảng trắng (4.0+)
$splitTách chuỗi thành mảng
$strLenBytes / $strLenCPĐộ dài chuỗi

Lưu ý

  • Tất cả đối số của $concat phải là chuỗi (string)
  • Số/Date/ObjectId cần chuyển đổi: {$toString: "$numericField"}
  • Kết quả aggregation không lưu vào DB trừ khi dùng $merge/$out