如何在mongoDB中使用$cond

问题描述 投票:0回答:1

请参考附图并帮我解释一下这个案例。 当 woo_order_id 为空时,为什么 cova_items 列没有分配 InStock 列的值? 查询命令:

db.cova_order.aggregate([
    {
        $project:{
            InStock:1,
            woo_order_id:1,
            woo_order_data:1,
            cova_items:{
                    $cond: { if: { $eq:["$woo_order_id",null] }, then:"$InStock" , else:"$woo_order_data" }
            }
        }
    },

=> 结果:cova_items 列显示的值与 woo_order_data 列类似

如果有错误请告诉我。谢谢

mongodb aggregation-framework
1个回答
0
投票

$cond
简化了语法。

{ $cond: [ <boolean-expression>, <true-case>, <false-case> ] }

快速解决方案:

看来你的

$woo_order_id
不是
null
,而是空的。

{$cond:[ {$eq:["$woo_order_id", ""] }, "$InStock", "$woo_order_data"]}

完整的解决方案

无论

$woo_order_id
可以是
null
undefined
还是
missing
,使用$ifNull运算符我们都可以覆盖它们。

db.cova_order.aggregate([
  {
    $project: {
      InStock: 1,
      woo_order_id: 1,
      woo_order_data: 1,
      cova_items: {
        $cond: [
          { $eq: [ { "$ifNull": [ "$woo_order_id", ""] }, "" ] },
          "$InStock",
          "$woo_order_data"
        ]
      }
    }
  }
])

Mongo游乐场

© www.soinside.com 2019 - 2024. All rights reserved.