Предположим, у меня есть коллекция trips
, где я хотел бы вычислить status
каждого trip
. Состояние рассчитывается на основе других полей.
- Если в поездке нет водителя, оно должно быть
pending
. - Если в поездке есть водитель, оно должно быть
in transit
. - Если в поездке есть водитель и номер счета, то он должен быть
completed
. - Если в поездке есть водитель, номер счета и номер счета, он должен быть
billed
.
Как я могу реализовать это с помощью конвейера агрегации?
Примеры документов:
[{
// This has both driver and invoice, should be completed
"_id" : ObjectId("5e24fbfd44621900c5730a48"),
"customer" : ObjectId("5dd7eaf7ef8a7b00ba8f090b"),
"date" : ISODate("2020-01-17T03:00:00.000Z"),
"distance" : 24, // in km
"driver" : ObjectId("5e1e302e26f00000c451923e"),
"invoice" : "0001-00001234",
"status": "completed" // this should be calculated
},
{
// This has only driver, should be in transit
"_id" : ObjectId("5e24fbfd44621900c5730a48"),
"customer" : ObjectId("5dd7eaf7ef8a7b00ba8f090b"),
"date" : ISODate("2020-01-17T03:00:00.000Z"),
"distance" : 24, // in km
"driver" : ObjectId("5e1e302e26f00000c451923e"),
"status": "in transit" // this should be calculated
},
{
// This is missing both driver and invoice, should be pending
"_id" : ObjectId("5e24fbfd44621900c5730a48"),
"customer" : ObjectId("5dd7eaf7ef8a7b00ba8f090b"),
"date" : ISODate("2020-01-17T03:00:00.000Z"),
"distance" : 24, // in km
"status": "pending" // this should be calculated
}]