[JAVA-3900] Extend $ifNull to accept more than two arguments Created: 07/Dec/20  Updated: 05/Dec/22  Resolved: 05/Dec/22

Status: Closed
Project: Java Driver
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Improvement Priority: Major - P3
Reporter: Backlog - Core Eng Program Management Team Assignee: Maxim Katcharov
Resolution: Duplicate Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Cloners
Depends
depends on SERVER-12573 Extend $ifNull to accept more than tw... Closed
Epic Link: Expression builders
Server Compat: 4.9
Quarter: FY23Q4

 Description   
Downstream Change Summary

Previously, $ifNull only supported 2 arguments. Now, $ifNull accepts 2+ arguments and returns the first that is not null (and not undefined or missing). If all arguments are null/undefined/missing, the last argument is returned.

Description of Linked Ticket

This could be described as $ifNull expression that accepts multiple arguments (rather than current two only). First non-null expression would be used.

Original description:

It would be great if instead of making a long list of conditionals you could use any $any operator to get the first of the fields that exists.

Ex:

var docs = [
  { 'a': true },
  { 'b': true },
  { 'a': true}
  ...
]

{ '$project':
  { 'wow':
    { '$any': [ '$a', '$b', '$b.nested', ... ] }
  }
}

This would make it easy to project an _id for use by a $group stage in situations where you have varied document schema.

For example, the next stage of the pipeline could be:

{ $group: 
  { 
    _id: { wow: '$wow' },
    count: { '$sum': 1 }
  }
}



 Comments   
Comment by Maxim Katcharov [ 05/Dec/22 ]

https://jira.mongodb.org/browse/JAVA-4784 covers this usage, without the need for ifNull (which is used internally elsewhere).

Generated at Thu Feb 08 09:00:43 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.