如何编写MongoDB查询以有选择地过滤

时间:2017-06-05 15:47:43

标签: mongodb

我想编写一个查询,其中有两种类型的员工存储在数据库中。我想要一个按开始日期排序的所有员工的列表,但如果员工处于“合同”状态,那么我只想包括那些结束日期仍在将来的员工。

此类集合的示例如下:

{
  "_id": 123,
  "startDate": some date
  "endDate": some date
  "type": “FULL_TIME",
},
{
  "_id": 123,
  "startDate": some date
  "endDate": some date
  "type": “CONTRACT",
},

1 个答案:

答案 0 :(得分:2)

您可以尝试以下$or查询。

获得所有有效CONTRACT员工的第一个条件,第二部分是让所有FULL_TIME员工接着asc排序startDate

db.collection.find(
  { $or:
    [
      { $and:
        [
          { type: "CONTRACT" }, 
          { endDate: { $gt: new ISODate() } }
        ]
      },
      { type:"FULL_TIME" }
    ]
  }
).sort( { startDate: 1 } );