2012-01-01 9 views
9

W MongoDB, można użyć obiektów JSON stylu, takie jak w poniższym przykładzie kwerendy kolekcji:Czy istnieje sposób na użycie obiektów zapytań MongoDB do filtrowania zwykłych tablic JavaScript?

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

Chciałbym ponowne że { x : { $ne : 3 }, y : 'foo' } bit i używać go do filtrowania tablicę obiektów JavaScript.

Czy istnieje jakiś kod/biblioteka, która może to zrobić, i która obsługuje wszystkie opcje zapytania (lub przynajmniej ma sens)?

+1

brzmi jak dobra sugestia dla osób, które MongoDB chce dodać do swojej biblioteki. –

Odpowiedz

8

Ok, więc tutaj jest inna próba:

sift.js (npm: przesiać) przez Craig Condon jest MongoDB inspirowane tablica filtrowanie biblioteki. To trochę jak alternatywa dla Underscore dla ludzi, którzy kochają MongoDB. Sift.js obsługuje operatorów takich jak $ in i $ gt, , ale może także filtrować tablice w oparciu o funkcje, a nawet współpracuje z głęboko zagnieżdżonymi obiektami w tablicach .

Craig przedstawił kilka przykładów, które powinny wyglądać znajomo Mongo użytkownicy:

var sift = require('sift'); 

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

Źródło: http://dailyjs.com/2012/01/04/node-roundup/

+0

Och, to wygląda idealnie! Miłe znalezisko. Dzięki – emertechie

+0

@Emil, to miłe znalezisko .. +1 – RameshVel

2

Underscore.js to świetna biblioteka do wykonywania map/zmniejszania zadań na strukturach JavaScript. Wysoce polecany.

+0

Są również dostępne natywnie w 'Array.prototype' na bardziej nowoczesnych przeglądarkach. Sądzę, że OP chce przekazać obiekt do filtrowania sposobu Mongo (domyślam się, że obejmuje operacje atomowe, takie jak '$ in'). – pimvdb

+0

Prawidłowo, chcę móc używać tego samego filtru do filtrowania danych MongoDB _i_ regularne tablice JavaScript – emertechie

2

Nie sądzę, że można po prostu użyć filtrów mongodb w zwykłych tablicach js. Bo trzeba zrozumieć fakt, że

Filtry określone w MongoDB są oceniane w indeksów MongoDB nie w wyniku javascript zestaw

oznacza filtry oceniano (przetłumaczone) do kwerendy przeciwko indeksu nie js. Pytasz więc DSL na szczycie mongodb (lub JS), który oceni filtry indeksu mongodb w tablicy JS.

Nie sądzę, że jest to konieczne, ponieważ oba służą różnym celom (chociaż jest to możliwe (trudne) do napisania niestandardowego DSL). Istnieją również główne frameworki, takie jak underscore.js, które już oferują sposoby na ich obsługę.

2

O ile widzę, Mingo ma szersze wsparcie zapytań Mongo niż Sift.

Powiązane problemy