2012-01-01 29 views
9

Trong MongoDB, bạn có thể sử dụng đối tượng JSON-phong cách chẳng hạn như trong những điều sau đây để truy vấn một bộ sưu tập:Có cách nào để sử dụng các đối tượng truy vấn MongoDB để lọc các mảng JavaScript thông thường không?

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

Tôi muốn tái sử dụng mà { x : { $ne : 3 }, y : 'foo' } bit và sử dụng nó để lọc một mảng của các đối tượng JavaScript.

Có bất kỳ mã/thư viện nào ở đó có thể làm điều đó và hỗ trợ tất cả các tùy chọn truy vấn (hoặc nhiều như ý nghĩa không?)?

+1

giống như một gợi ý tốt cho những người MongoDB thêm vào thư viện của họ. –

Trả lời

8

Ok, vì vậy đây là một thử:

sift.js (NPM: sift) bởi Craig Condon là một MongoDB lấy cảm hứng từ mảng thư viện lọc. Nó giống như một thay thế cho dấu gạch dưới cho những người yêu MongoDB. Sift.js hỗ trợ các toán tử như $ in và $ gt, nhưng cũng có thể lọc các mảng dựa trên các hàm và thậm chí làm việc với các đối tượng được lồng sâu trong các mảng .

Craig đã cung cấp một vài ví dụ mà nên trông quen thuộc với Mongo người dùng:

var sift = require('sift'); 

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

Nguồn: http://dailyjs.com/2012/01/04/node-roundup/

+0

Ồ, điều này có vẻ hoàn hảo! Nice tìm. Cảm ơn – emertechie

+0

@Emil, thats a nice find .. +1 – RameshVel

2

Underscore.js là một thư viện tuyệt vời để làm loại bản đồ/giảm việc làm trên cấu trúc javascript. Rat khuyen khich.

+0

Chúng cũng có sẵn trong 'Array.prototype' trên các trình duyệt hiện đại hơn. Tôi nghĩ rằng OP muốn vượt qua một đối tượng để lọc theo cách Mongo (tôi đoán bao gồm các hoạt động nguyên tử như '$ in'). – pimvdb

+0

Đúng, tôi muốn có thể sử dụng cùng một bộ lọc để lọc dữ liệu MongoDB _and_ các mảng JavaScript thông thường – emertechie

2

Tôi không nghĩ rằng bạn chỉ có thể sử dụng bộ lọc mongodb trong mảng js bình thường. Bởi vì bạn cần phải hiểu một thực tế rằng

Các bộ lọc quy định tại MongoDB được đánh giá trong chỉ số MongoDB không có trong kết quả javascript thiết lập

Có nghĩa là các bộ lọc đánh giá (dịch) để truy vấn đối với một chỉ số không js. Vì vậy, những gì bạn đang yêu cầu là một DSL trên đầu trang của mongodb (hoặc JS) sẽ đánh giá các bộ lọc chỉ mục mongodb trong mảng JS.

Tôi không nghĩ rằng nó cần thiết vì cả hai đều phục vụ các mục đích khác nhau (Mặc dù có thể (khó khăn) để viết DSL tùy chỉnh). Ngoài ra còn có các khung công tác chính như underscore.js đã cung cấp một cách để xử lý chúng.

2

Theo như tôi thấy, Mingo có hỗ trợ truy vấn Mongo rộng hơn Sift.

Các vấn đề liên quan