Concat mảng MongoDB

Để nối trong MongoDB, hãy sử dụng $concat trong $project. Hãy để chúng tôi tạo một bộ sưu tập với các tài liệu -

> db.demo359.insertOne(
..    {
...
..       Name1: "Chris",
..       Name2: "David",
..       Subjects: ["MySQL","MongoDB","Java"]
..    }
.. );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e5694cdf8647eb59e5620d0")
}

Hiển thị tất cả các tài liệu từ một bộ sưu tập với sự trợ giúp của phương thức find() -

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

Điều này sẽ tạo ra đầu ra sau -

{
   "_id" : ObjectId("5e5694cdf8647eb59e5620d0"),
   "Name1" : "Chris",
   "Name2" : "David",
   "Subjects" : [
      "MySQL",
      "MongoDB",
      "Java"
   ]
}

Sau đây là truy vấn để nối các giá trị của mảng với các trường khác -

> db.demo359.aggregate([
..    {
..       $project: {
..          values: {
..             $reduce: {
..                input: '$Subjects',
..                initialValue: '',
..                in: {
..                   $concat: ['$$value',' ','$$this']
..                }
..             }
..          },
..          Name1: 1
..       }
..    },
..    {
..       $project: {
..          'ConcatResult': { '$concat': [ '$Name1', '$values'] }
..       }
..    }
.. ])
{ "_id" : ObjectId("5e5694cdf8647eb59e5620d0"), "ConcatResult" : "Chris MySQL MongoDB Java" }

Điều này sẽ tạo ra đầu ra sau -

{ "_id" : ObjectId("5e5694cdf8647eb59e5620d0"), "ConcatResult" : "Chris MySQL MongoDB Java" }

Concat mảng MongoDB


Concat mảng MongoDB

Tôi muốn nối các giá trị trường mảng int bên trong một mảng đối tượng thành một trường chuỗi sau khi chia chúng (cho 10)

Đây là định dạng tài liệu hiện có

{ 
  "no" : "2020921008981",  
  "date" : ISODate("2020-04-01T05:19:02.263+0000"), 
  "sale" : { 
   "soldItems" : [
       {
         "itemRefId" : "5b55ac7f0550de00210a3b24", 
         "soldPrice" : NumberInt(800), 
       },
       {
         "itemRefId" : "5b55ac7f0550de00210a3b25", 
         "soldPrice" : NumberInt(1000), 
       }
     ] 
   }
 }

kết quả mong đợi

{ 
  "no" : "2020921008981",  
  "date" : ISODate("2020-04-01T05:19:02.263+0000"),  
  "priceList" : "8.0 \n 10.0"
}

Nỗ lực với $reduce

 priceList: {
            $reduce: {
                input: "$sale.soldItems.soldPrice",
                initialValue: "",
                in: {
                    $cond: [ { "$eq": [ { $toString: { $divide: [ "$$value", 10 ] } }, "" ] }, "$$this", { $concat: [ { $toString: { $divide: [ "$$value", 10 ] } }, "\n", "$$this" ] } ]
                }
            }
        }

Nhưng cuối cùng lại nhận được lỗi

> db.demo359.aggregate([
..    {
..       $project: {
..          values: {
..             $reduce: {
..                input: '$Subjects',
..                initialValue: '',
..                in: {
..                   $concat: ['$$value',' ','$$this']
..                }
..             }
..          },
..          Name1: 1
..       }
..    },
..    {
..       $project: {
..          'ConcatResult': { '$concat': [ '$Name1', '$values'] }
..       }
..    }
.. ])
{ "_id" : ObjectId("5e5694cdf8647eb59e5620d0"), "ConcatResult" : "Chris MySQL MongoDB Java" }
2. Bất kỳ ý tưởng sẽ được đánh giá cao

Trong MongoDB, toán tử đường dẫn tổng hợp

db.data.aggregate([
    { $match: { _id: 1 } },
    { $project: { 
        _id: 0,
        result: { $concatArrays: [ "$a", "$b" ] }
        }
    }
])
2 nối hai hoặc nhiều mảng và trả về mảng được nối

Ví dụ

Giả sử chúng ta có một bộ sưu tập tên là

db.data.aggregate([
    { $match: { _id: 1 } },
    { $project: { 
        _id: 0,
        result: { $concatArrays: [ "$a", "$b" ] }
        }
    }
])
3 với tài liệu sau

> db.demo359.find().pretty();
0

Chúng ta có thể sử dụng toán tử

db.data.aggregate([
    { $match: { _id: 1 } },
    { $project: { 
        _id: 0,
        result: { $concatArrays: [ "$a", "$b" ] }
        }
    }
])
2 để nối mảng của trường
db.data.aggregate([
    { $match: { _id: 1 } },
    { $project: { 
        _id: 0,
        result: { $concatArrays: [ "$a", "$b" ] }
        }
    }
])
5 với mảng của trường
db.data.aggregate([
    { $match: { _id: 1 } },
    { $project: { 
        _id: 0,
        result: { $concatArrays: [ "$a", "$b" ] }
        }
    }
])
6

________số 8

Kết quả

> db.demo359.find().pretty();
5

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

> db.demo359.find().pretty();
6

Hãy áp dụng

db.data.aggregate([
    { $match: { _id: 1 } },
    { $project: { 
        _id: 0,
        result: { $concatArrays: [ "$a", "$b" ] }
        }
    }
])
2 cho điều đó

> db.demo359.find().pretty();
8

Kết quả

> db.demo359.find().pretty();
9

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ề

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

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" : ObjectId("5e5694cdf8647eb59e5620d0"),
   "Name1" : "Chris",
   "Name2" : "David",
   "Subjects" : [
      "MySQL",
      "MongoDB",
      "Java"
   ]
}
1

Đây là những gì xảy ra khi chúng tôi áp dụng

db.data.aggregate([
    { $match: { _id: 1 } },
    { $project: { 
        _id: 0,
        result: { $concatArrays: [ "$a", "$b" ] }
        }
    }
])
2 cho trường
db.data.aggregate([
    { $match: { _id: 1 } },
    { $project: { 
        _id: 0,
        result: { $concatArrays: [ "$a", "$b" ] }
        }
    }
])
5 và trường không tồn tại

{
   "_id" : ObjectId("5e5694cdf8647eb59e5620d0"),
   "Name1" : "Chris",
   "Name2" : "David",
   "Subjects" : [
      "MySQL",
      "MongoDB",
      "Java"
   ]
}
4

Kết quả

{
   "_id" : ObjectId("5e5694cdf8647eb59e5620d0"),
   "Name1" : "Chris",
   "Name2" : "David",
   "Subjects" : [
      "MySQL",
      "MongoDB",
      "Java"
   ]
}
5

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

Mỗi biểu thức được cung cấp cho

db.data.aggregate([
    { $match: { _id: 1 } },
    { $project: { 
        _id: 0,
        result: { $concatArrays: [ "$a", "$b" ] }
        }
    }
])
2 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 thành một mảng, một lỗi sẽ được trả về

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

{
   "_id" : ObjectId("5e5694cdf8647eb59e5620d0"),
   "Name1" : "Chris",
   "Name2" : "David",
   "Subjects" : [
      "MySQL",
      "MongoDB",
      "Java"
   ]
}
7

Đây là điều sẽ xảy ra nếu chúng ta cố gắng nối các trường

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

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

Kết quả

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

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

Làm cách nào để nối hai mảng trong MongoDB?

Nối các mảng để trả về mảng đã nối. $concatArrays có cú pháp như sau. { $concatArrays. [ Các biểu thức

Làm cách nào để nối hai trường trong MongoDB?

Nối chuỗi và trả về chuỗi đã nối. $concat có cú pháp như sau. { $concat. [ Các đối số có thể là bất kỳ biểu thức hợp lệ nào miễn là chúng phân giải thành chuỗi.

Làm cách nào để hợp nhất hai đối tượng trong MongoDB?

$mergeObjects ghi đè lên các giá trị của trường khi nó hợp nhất các tài liệu. Nếu các tài liệu cần hợp nhất bao gồm cùng một tên trường, thì trường, trong tài liệu kết quả, có giá trị từ tài liệu cuối cùng được hợp nhất cho trường.

Làm cách nào để chuyển đổi mảng thành chuỗi trong MongoDB?

updateOne( { _id. tài liệu. _id }, { $set. { ID sản phẩm. tài liệu. productId } } ) ); Bản cập nhật này sẽ hoạt động để chuyển đổi giá trị mảng thành chuỗi - tính năng này hoạt động với MongoDB 4. Chỉ có 2 phiên bản trở lên.