Trong MongoDB, $add
nhà điều hành đường ống tổng hợp cộng các giá trị với nhau. Các giá trị đó có thể là số hoặc có thể là số và ngày.
$add
toán tử chấp nhận các giá trị làm đối số. Các đối số có thể là bất kỳ biểu thức hợp lệ nào miễn là chúng giải quyết thành tất cả các số hoặc thành số và ngày.
Dữ liệu mẫu
Giả sử chúng ta có một tập hợp được gọi là data
với các tài liệu sau:
{ "_id" : 1, "a" : 100, "b" : 50, "c" : ISODate("2021-01-03T23:30:15.100Z") } { "_id" : 2, "a" : 20000, "b" : 15, "c" : ISODate("2019-12-08T04:00:20.112Z") } { "_id" : 3, "a" : 1700, "b" : 3, "c" : ISODate("2020-09-24T10:45:01.007Z") }
Thêm số
Chúng ta có thể sử dụng $add
toán tử để thêm a
và b
các lĩnh vực với nhau.
Ví dụ:
db.data.aggregate(
[
{ $project: {
_id: 0,
a: 1,
b: 1,
result: {
$add: [ "$a", "$b" ] } }
}
]
)
Kết quả:
{ "a" : 100, "b" : 50, "result" : 150 } { "a" : 20000, "b" : 15, "result" : 20015 } { "a" : 1700, "b" : 3, "result" : 1703 }
Thêm số với ngày
Nếu một trong các đối số là ngày, các đối số khác được coi là mili giây để thêm vào ngày.
Ví dụ:
db.data.aggregate(
[
{ $project: {
_id: 0,
a: 1,
c: 1,
result: {
$add: [ "$a", "$c" ] } }
}
]
).pretty()
Kết quả:
{ "a" : 100, "c" : ISODate("2021-01-03T23:30:15.100Z"), "result" : ISODate("2021-01-03T23:30:15.200Z") } { "a" : 20000, "c" : ISODate("2019-12-08T04:00:20.112Z"), "result" : ISODate("2019-12-08T04:00:40.112Z") } { "a" : 1700, "c" : ISODate("2020-09-24T10:45:01.007Z"), "result" : ISODate("2020-09-24T10:45:02.707Z") }
Chúng ta có thể thấy rằng các giá trị số trong a
trường đã được thêm dưới dạng mili giây vào c
trường.
Đối số khác
Các ví dụ trước cộng hai giá trị với nhau, nhưng bạn có thể thêm nhiều giá trị hơn nếu cần.
Dưới đây là một ví dụ về việc thêm cả ba trường với nhau:
db.data.aggregate(
[
{ $project: {
_id: 0,
a: 1,
b: 1,
c: 1,
result: {
$add: [ "$a", "$b", "$c" ] } }
}
]
).pretty()
Kết quả:
{ "a" : 100, "b" : 50, "c" : ISODate("2021-01-03T23:30:15.100Z"), "result" : ISODate("2021-01-03T23:30:15.250Z") } { "a" : 20000, "b" : 15, "c" : ISODate("2019-12-08T04:00:20.112Z"), "result" : ISODate("2019-12-08T04:00:40.127Z") } { "a" : 1700, "b" : 3, "c" : ISODate("2020-09-24T10:45:01.007Z"), "result" : ISODate("2020-09-24T10:45:02.710Z") }
Lần này, cả hai số đã được thêm vào ngày.
Chỉ được phép một ngày
Mặc dù bạn có thể thêm nhiều biểu thức lại với nhau, nhưng bạn chỉ có thể bao gồm một ngày. Chuyển nhiều ngày dẫn đến lỗi.
Ví dụ:
db.data.aggregate(
[
{ $project: {
_id: 0,
a: 1,
b: 1,
c: 1,
result: {
$add: [ "$c", ISODate("2020-09-24T10:45:01.007Z") ] } }
}
]
).pretty()
Kết quả:
uncaught exception: Error: command failed: { "ok" : 0, "errmsg" : "only one date allowed in an $add expression", "code" : 16612, "codeName" : "Location16612" } : 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
Không tranh luận
Không chuyển đối số nào cho $add
kết quả là 0
được trả lại.
Ví dụ:
db.data.aggregate(
[
{ $project: {
result: {
$add: [ ] } }
}
]
)
Kết quả:
{ "_id" : 1, "result" : 0 } { "_id" : 2, "result" : 0 } { "_id" : 3, "result" : 0 }
Chuyển giá trị rỗng
Chuyển null
kết quả là null
.
Ví dụ:
db.data.aggregate(
[
{ $project: {
result: {
$add: [ null ] } }
}
]
)
Kết quả:
{ "_id" : 1, "result" : null } { "_id" : 2, "result" : null } { "_id" : 3, "result" : null }