猫鼬-基于枚举值的聚合$ match

时间:2018-08-23 18:50:51

标签: javascript mongodb mongoose aggregation-framework

我与猫鼬聚合,我得到的对象看起来像这样:

foods: {
  fruits: {
    apple: 'NONE',
    banana: null,
    pearl: 'INCLUDED'
  }
}

水果可以有4个值:null,'NONE','INCLUDED','EXTRA'

我的目标是在此聚合中创建$ match / filter,以便能够过滤出null和'NONE'值。

是否可以执行此操作?

就像汇总中的我这样:

    {
        $match: 'foods.fruits.pearl',
    }

然后取回那些珍珠具有'INCLUDED'或'EXTRA'值的物体吗?

1 个答案:

答案 0 :(得分:0)

您可以在mongodb 3.4.4 及更高版本

中尝试以下聚合

好吧,这里有未知的键,它们的值分别为NONEnull,因此,您可以使用$objectToArray聚合将键转换为值,并可以轻松地$match使用它们

db.collection.aggregate([
  { "$addFields": {
    "data": { "$objectToArray": "$foods.fruits" }
  }},
  { "$match": { "data.v": { "$in": [ "NONE", null ] } } },
  { "$project": { "data": 0 }}
])