MongoDBでは、$ifNull は、nullの代わりに使用する値を指定できる集約パイプライン演算子です。 。
それが機能する方法は、式と置換式を提供することです。式がnull以外の値と評価された場合、その式が返されます。ただし、式がnull値と評価された場合、$ifNull 置換式の値を返します。
null値には、未定義の値または欠落しているフィールドのインスタンスが含まれます。
例
testというコレクションがあるとします。 次のドキュメントを使用:
{ "_id" : 1, "data" : 250 }
{ "_id" : 2, "data" : -250 }
{ "_id" : 3, "data" : "Bucket" }
{ "_id" : 4, "data" : 0 }
{ "_id" : 5, "data" : ISODate("2021-01-03T23:30:15.100Z") }
{ "_id" : 6, "data" : null }
{ "_id" : 7, "data" : Infinity }
{ "_id" : 8, "data" : -Infinity }
$ifNullを使用するとどうなりますか dataの演算子 フィールド:
db.test.aggregate(
[
{
$project:
{
result: { $ifNull: [ "$data", "Value not provided" ] }
}
}
]
) 結果:
{ "_id" : 1, "result" : 250 }
{ "_id" : 2, "result" : -250 }
{ "_id" : 3, "result" : "Bucket" }
{ "_id" : 4, "result" : 0 }
{ "_id" : 5, "result" : ISODate("2021-01-03T23:30:15.100Z") }
{ "_id" : 6, "result" : "Value not provided" }
{ "_id" : 7, "result" : Infinity }
{ "_id" : 8, "result" : -Infinity }
null値を持つフィールドは1つだけであることがわかります。したがって、"Value not provided"を返したのはこのフィールドだけでした。 。
未定義のフィールドと欠落しているフィールド
前述のように、未定義の値と欠落しているフィールドはnull値として扱われます。
コレクションに次のドキュメントを追加するとします。
{ "_id" : 9, "data" : undefined }
{ "_id" : 10, "name" : "Homer" }
この場合、ドキュメント9にはundefinedがあります データフィールドにありますが、ドキュメント10にはdataさえありません フィールド。
$ifNullを適用すると次のようになります それらのドキュメントへ:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 9, 10 ] } } },
{
$project:
{
result: { $ifNull: [ "$data", "Value not provided" ] }
}
}
]
) 結果:
{ "_id" : 9, "result" : "Value not provided" }
{ "_id" : 10, "result" : "Value not provided" }