2012-01-01 8 views
9

In MongoDB, è possibile utilizzare gli oggetti in stile JSON, come nel seguente per interrogare una collezione:Esiste un modo per utilizzare oggetti query MongoDB per filtrare gli array JavaScript regolari?

db.things.find({ x : { $ne : 3 }, y : 'foo' }); 

mi piacerebbe riutilizzare che { x : { $ne : 3 }, y : 'foo' } bit e usarlo per filtrare un array di oggetti JavaScript.

C'è qualche codice/libreria che può farlo e che supporta tutte le opzioni di query (o almeno ha senso)?

+1

sembra un buon suggerimento per gli abitanti di MongoDB da aggiungere alla loro libreria. –

risposta

8

Ok, quindi ecco un altro tentativo:

sift.js (NPM: vagliare) da Craig Condon è una libreria di filtraggio serie MongoDB di ispirazione. È un po 'come un'alternativa a Underscore per le persone che adorano MongoDB. Sift.js supporta operatori come $ in e $ gt, ma può anche filtrare gli array in base alle funzioni e funziona anche con gli oggetti con profondità nidificata negli array .

Craig ha fornito alcuni esempi che dovrebbe essere familiare a Mongo utenti:

var sift = require('sift'); 

sift({ $in: ['hello','world'] }, ['hello','sifted','array!']); // 
['hello'] 

Fonte: http://dailyjs.com/2012/01/04/node-roundup/

+0

Oh, questo sembra perfetto! Bella scoperta. Grazie – emertechie

+0

@Emil, questa è una bella scoperta .. +1 – RameshVel

2

Underscore.js è una grande libreria per eseguire la mappa/ridurre il tipo di lavori su strutture javascript. Altamente raccomandato.

+0

Anche quelli sono disponibili nativamente in 'Array.prototype' su browser più moderni. Penso che l'OP voglia passare un oggetto per filtrare il modo Mongo (immagino che includa operazioni atomiche come '$ in'). – pimvdb

+0

Corretto, voglio essere in grado di utilizzare lo stesso filtro per filtrare i dati MongoDB _e i normali array JavaScript – emertechie

2

Non penso che si possano semplicemente usare i filtri mongodb nei normali array js. Perché è necessario capire il fatto che

I filtri specificati in MongoDB vengono valutate in indici mongodb non nel risultato javascript SET

significa che i filtri valutato (tradotto) per interrogare contro un indice non il js. Quindi quello che stai chiedendo è un DSL su mongodb (o JS) che valuterà i filtri di indice mongodb nell'array JS.

Non penso sia necessario poiché entrambi servono i diversi scopi (anche se è possibile (difficile) scrivere DSL personalizzate). Inoltre ci sono importanti framework come underscore.js già forniscono un modo per gestirli.

2

Per quanto posso vedere, Mingo ha un supporto di query Mongo più ampio di Sift.

Problemi correlati