MongoDBでは、$add 集約パイプライン演算子は、値を加算します。このような値は数値にすることも、数値と日付にすることもできます。
$add 演算子は値を引数として受け入れます。引数は、すべての数値または数値と日付のいずれかに解決される限り、任意の有効な式にすることができます。
サンプルデータ
dataというコレクションがあるとします。 次のドキュメントを使用:
{
"_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")
} 番号を追加
$addを使用できます aを追加する演算子 およびb 一緒にフィールド。
例:
db.data.aggregate(
[
{ $project: {
_id: 0,
a: 1,
b: 1,
result: {
$add: [ "$a", "$b" ] } }
}
]
) 結果:
{ "a" : 100, "b" : 50, "result" : 150 }
{ "a" : 20000, "b" : 15, "result" : 20015 }
{ "a" : 1700, "b" : 3, "result" : 1703 } 日付付きの番号を追加
引数の1つが日付の場合、他の引数はミリ秒として扱われ、日付に追加されます。
例:
db.data.aggregate(
[
{ $project: {
_id: 0,
a: 1,
c: 1,
result: {
$add: [ "$a", "$c" ] } }
}
]
).pretty() 結果:
{
"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")
}
aの数値がわかります cにミリ秒単位でフィールドが追加されました フィールド。
その他の引数
前の例では2つの値を一緒に追加していますが、必要に応じてさらに追加できます。
3つのフィールドすべてを一緒に追加する例を次に示します。
db.data.aggregate(
[
{ $project: {
_id: 0,
a: 1,
b: 1,
c: 1,
result: {
$add: [ "$a", "$b", "$c" ] } }
}
]
).pretty() 結果:
{
"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")
} 今回は、両方の数字が日付に追加されました。
許可される日付は1つだけです
多くの式を一緒に追加できますが、含めることができる日付は1つだけです。複数の日付を渡すとエラーが発生します。
例:
db.data.aggregate(
[
{ $project: {
_id: 0,
a: 1,
b: 1,
c: 1,
result: {
$add: [ "$c", ISODate("2020-09-24T10:45:01.007Z") ] } }
}
]
).pretty() 結果:
uncaught exception: Error: command failed: {
"ok" : 0,
"errmsg" : "only one date allowed in an $add expression",
"code" : 16612,
"codeName" : "Location16612"
} : aggregate failed :
example@sqldat.com/mongo/shell/utils.js:25:13
example@sqldat.com/mongo/shell/assert.js:18:14
example@sqldat.com/mongo/shell/assert.js:618:17
example@sqldat.com/mongo/shell/assert.js:708:16
example@sqldat.com/mongo/shell/db.js:266:5
example@sqldat.com/mongo/shell/collection.js:1046:12
@(shell):1:1 引数を渡さない
$addに引数を渡さない 結果は0 返送されます。
例:
db.data.aggregate(
[
{ $project: {
result: {
$add: [ ] } }
}
]
) 結果:
{ "_id" : 1, "result" : 0 }
{ "_id" : 2, "result" : 0 }
{ "_id" : 3, "result" : 0 } ヌル値の受け渡し
nullを渡す 結果はnull 。
例:
db.data.aggregate(
[
{ $project: {
result: {
$add: [ null ] } }
}
]
) 結果:
{ "_id" : 1, "result" : null }
{ "_id" : 2, "result" : null }
{ "_id" : 3, "result" : null }