Conditional grouping with $exists inside $cond

后端 未结 4 2056
情话喂你
情话喂你 2020-12-05 04:23

I have two keys A and B and their existence in the document is mutually exclusive. I have to group by A when A exists and group by B when B exists. So I am $project

相关标签:
4条回答
  • 2020-12-05 04:26

    I found your questions while looking for a similar problem, but insted of a key, I was looking for my parameters. I finally solved the issue.

    This is what I used for my $_id.status parameter, to check that if it exists inside the cond.

    $cond: [{
         $or: [{
              $ne: ["$_id.status", null]
         }]
    }, 1, null]
    

    $or is not needed. I keep it there... just for fun. I don't think it affects the query that much for the moment. I will test the speed later.

    0 讨论(0)
  • 2020-12-05 04:40

    if one wants to check $exists with in $cond an alternative approach is to use $not with $cond

    {$project: {MyKey: {$cond: [{$not: ["$A"]}, "$B", "$A"]}}} 
    

    and truth table for $not is as

    Hopes that Helps

    0 讨论(0)
  • 2020-12-05 04:41

    You can simulate exists with

    $ne : [$var_to_check, undefined]
    

    This returns true if the var is defined

    0 讨论(0)
  • 2020-12-05 04:51

    Use $ifNull instead of $cond in your $project:

    { $project: {MyKey: {$ifNull: ['$A', '$B'] }}}
    

    If A exists and is not null its value will be used; otherwise the value of B is used.

    0 讨论(0)
提交回复
热议问题