【问题标题】:Mongoose - Aggregation $match based on enum valuesMongoose - 基于枚举值的聚合 $match
【发布时间】:2019-01-30 05:28:17
【问题描述】:

我有一个与猫鼬的聚合,我得到的对象如下所示:

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

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

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

有没有办法做到这一点?

就像在聚合中我有这个:

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

然后取回珍珠具有“包含”或“额外”值的那些对象?

【问题讨论】:

  • 您的结果文档究竟应该是什么样子?

标签: javascript mongodb mongoose aggregation-framework


【解决方案1】:

您可以在 mongodb 3.4.4 及更高版本中尝试以下聚合

你在这里有未知的键,它们具有 NONEnull 的值,因此,你可以使用 $objectToArray 聚合将键变成值,并且可以轻松地使用它们 $match

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-11
    • 2013-06-16
    相关资源
    最近更新 更多