2017-06-05 3 views
0

Ich möchte eine Abfrage schreiben, wo wir 2 Arten von Mitarbeitern in einer Datenbank gespeichert haben. Ich möchte eine Liste aller Mitarbeiter sortiert nach ihrem Startdatum, aber wenn ein Mitarbeiter auf "Vertrag" ist, möchte ich nur die Mitarbeiter einschließen, deren Enddatum noch in der Zukunft liegt.Wie schreibe ich MongoDB Abfrage selektiv filtern

Beispiel für eine solche Sammlung wäre:

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

Antwort

2

Sie unter $or Fund Abfrage ausprobieren können.

Erste Bedingung erhalten alle aktiven CONTRACT Mitarbeiter und zweiten Teil alle FULL_TIME Mitarbeiter von asc Sortierung auf startDate gefolgt zu bekommen.

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