我想编写一个查询,其中有两种类型的员工存储在数据库中。我想要一个按开始日期排序的所有员工的列表,但如果员工处于“合同”状态,那么我只想包括那些结束日期仍在将来的员工。
此类集合的示例如下:
{
"_id": 123,
"startDate": some date
"endDate": some date
"type": “FULL_TIME",
},
{
"_id": 123,
"startDate": some date
"endDate": some date
"type": “CONTRACT",
},
答案 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 } );