2012-08-23 7 views
8

Ho sviluppato una semplice API che consente di creare una serie di criteri di ricerca all'interno di una raccolta MongoDB. Ora devo essere in grado di convertire questo array in una Query Mongo effettiva, e questa parte è dove sto avendo estrema difficoltà.Come si costruiscono query complesse con MongoDB e il driver C#?

Idealmente sono dopo un po 'la sintassi che mi permetterà di fare il seguente codice pseudo:

var query = new QueryBuilder(); 
foreach (var group in groups) 
{ 
    switch (group.Condition) 
    { 
     case GroupCondition.Or: 
      query.Or(group.Queries); 
     break; 
     case GroupCondition.And: 
      query.And(group.Queries); 
     break; 
    } 
} 
return myCollection.FindAs(type, query); 

Io in realtà voglio costruire le query leggermente più complesso, ma alla fine io sono dopo la funzionalità per costruire dinamicamente le mie domande con oggetti come visto nel mio codice pseudo sopra.

Sentitevi liberi di chiedermi ulteriori dettagli se non mi sono reso abbastanza chiaro su quello che sto cercando di ottenere.

+0

Quindi, prima di andare troppo lontano, dovresti esaminare l'uso di Linq. – kelloti

+0

Lo stesso qui. Vedo che alcune persone usano esempi di Query con più espressioni di query concatenate insieme, quando faccio questo come Query.EQ(). GT(); non funziona come EQ/GT non restituisce un oggetto query. Cosa mi manca qui? –

risposta

4

Sembra che tu abbia l'idea giusta ... Esiste una classe chiamata Query che è essenzialmente un generatore di query senza l'istanziazione.

utilizzando MongoDB.Driver.Builders;

Query.E, Query.Or, ecc. Ci sono tutti. È la stessa cosa che viene utilizzata sotto il provider linq per creare query complesse.

+0

Qualcuno può effettivamente puntare a un esempio che mostra più selettori di query messi insieme? Sembra che Query non sia concatenabile. –

+1

@RickStrahl lo compila come un AST. Query.E ( Query.OR ( Query.EQ ("x", 1), Query.EQ ("y", 2)), Query.GT ("z", 3)); –

+0

@RickStrahl Ho finito per creare un linguaggio di query su misura che si interrompe e quindi viene compilato in Mongo Queries (ponendo quindi questa domanda). The Query Language è stato scartato alla fine, ma ha funzionato (con una serie di test!). Hai ancora bisogno di aiuto? Sono stato tentato di ricrearlo e renderlo pubblico come OSS, magari persino pubblicare un pacchetto NuGet per alcuni degli helper. – JustinN

Problemi correlati