MongoDB查询以使用OR运算符获取数据

时间:2019-11-29 05:30:46

标签: mongodb mongoose aggregation-framework

我有一个名为Event的数据库模型。

const eventSchema = new Schema({
  action: String,
  description: String,
  reference: {
    id: Number,
    name: String,
    refType: String,
  },
}, { timestamps: true });

数据库中的某些记录是

action | description | refType
------------------------------------
Click  | Breakfast   | TmdSuggested
------------------------------------
Click  | Breakfast   | TmdMeatType
------------------------------------
Click  | Lunch       | TmdSuggested
------------------------------------
Click  | Lunch       | TmdMeatType
------------------------------------

在这些我要过滤的记录中,只有这些组合。

action | description | refType
------------------------------------
Click  | Breakfast   | TmdSuggested
------------------------------------
Click  | Breakfast   | TmdMeatType
------------------------------------
Click  | Lunch       | TmdMeatType
------------------------------------

我到目前为止所做的是

{
                $match: {
                    action: 'Click',
                    $or: [
                        { description: 'Breakfast', reference: { refType: 'TmdSuggested' } },
                        { description: 'Breakfast', reference: { refType: 'TmdMeatType' } },
                        { description: 'Lunch', reference: { refType: 'TmdMeatType' } }
                    ]
                }
},

这不会给我一个错误。但这似乎不起作用。没有数据返回。 我的代码有什么问题。

如何使用mongo db mongoose实现此目的。

2 个答案:

答案 0 :(得分:2)

您可以使用reference.refType过滤子项。

{ $match: {
      action: 'Click',
      $or: [ { description: 'Breakfast', "reference.refType": 'TmdSuggested' },
             { description: 'Breakfast', "reference.refType": 'TmdMeatType' },
             { description: 'Lunch', "reference.refType": 'TmdMeatType' } ]
  }
}

答案 1 :(得分:1)

那不是您在MongoDB中查询对象元素的方式,我认为这应该起作用

$match: {
    action: "Click",
    $or: [
      {
        description: "Breakfast",
        "reference.refType": "TmdSuggested"
      },
      {
        description: "Breakfast",
        "reference.refType": "TmdMeatType"
      },
      {
        description: "Lunch",
        "reference.refType": "TmdMeatType"
      }
    ]
  }