MongoDB 如何添加条件 $match 条件

Mob*_*ihy 3 mongoose mongodb aggregation-framework

我有以下架构

{
   f1: "test",
   f2: "something",
   type: "A",
   date: "2018-11-01T00:00:00.000Z",
   deleted: false
},
{
   "f1": "check",
   type: "B",
   deleted: false
}
Run Code Online (Sandbox Code Playgroud)

现在我想要的是获取所有数据,如果type = "A", then add an extra condition to my match query, suppose compare its date with current date. 我目前的查询是:

db.getCollection('myCollection').aggregate([
  {$match:{
        {"deleted":false},
        // I want to check if type is A then compare its date 
  }}
])
Run Code Online (Sandbox Code Playgroud)

Dom*_*nic 8

您可以尝试$or说“如果它不是类型 A日期是 x”:

{$match:{
  $and: [
    {deleted: false},
    $or: [
      {type: {$ne: 'A'}},
      {date: {$gte: ISODate("2018-01-01T00:00:00.0Z"), $lt: ISODate("2018-06-01T00:00:00.0Z")}}
    ]
  ]
}}
Run Code Online (Sandbox Code Playgroud)


Har*_*hah 5

$match有条件使用$or

db.getCollection('tests').aggregate([
  { $match: {
    $or : [
      { "deleted": false, "type": "A", "date": ISODate("2018-11-01T00:00:00.000Z") },
      { "deleted": false, type: { $ne: "A" }}
    ]}
  }
])
Run Code Online (Sandbox Code Playgroud)