2013-03-13 28 views
16

Có thư viện javascript nào cho phép tôi thể hiện các biến vị ngữ đối tượng trong DSL tương tự như ngôn ngữ truy vấn MongoDB không? Vì lợi ích của sự rõ ràng trong một chương trình lớn, tôi muốn để có thể nói:Thư viện Javascript nào có thể đánh giá các vị từ truy vấn giống MongoDB đối với một đối tượng?

var obj = { 
    a: 1, 
    b: 'abcdefg' 
}, qry = { 
    a: { $gt: 0 }, 
    b: /^abc/ 
}; 

if(query(qry).matches(obj)) { 
    // do something appropriate since 
} 

thay vì:

var obj = { 
    a: 1, 
    b: 'abcdefg' 
}; 
if(obj.a>0 && qry.b.test(obj.b)) { 
    // do something appropriate 
} 

Tôi đang sử dụng Node.js, vì vậy bất cứ điều gì trên NPM sẽ thật tuyệt. Nó sẽ là một tiền thưởng thêm nếu thư viện có thể chọn các đối tượng ra khỏi một mảng cũng như chỉ phù hợp với các đối tượng riêng lẻ.

tôi xem xét hai câu hỏi liên quan, nhưng họ không phải là đặc biệt hữu ích cho tình hình của tôi:

+0

Bản sao có thể có của [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?] (Http://stackoverflow.com/questions/8695718/is-there-a-way-to-use-mongodb- query-objects-to-filter-regular-javascript-array) –

Trả lời

16

OK Tôi tìm thấy câu trả lời: Sift.js

Bây giờ cho câu trả lời dài: Điều này đã được asked and answered before. Những điểm nổi bật là:

  • Sử dụng Sift nếu bạn thực sự muốn Mongo cú pháp
  • Nếu bạn muốn trở thành chủ đạo hơn, sử dụng Underscore.js như bao người khác. Nó có rất nhiều chức năng tiện dụng ngoài thực tế là về cơ bản nó thực hiện những gì sàng lọc với cú pháp hơi khác một chút.
  • Bạn hoàn toàn không cần bất kỳ thư viện nào - trình duyệt hiện đại hỗ trợ nhiều chức năng hữu ích trực tiếp trên Array prototype, chẳng hạn như filter() chẳng hạn.

Lưu ý cuối cùng, mongodb-riff dường như đang cố gắng làm điều gì đó tương tự nhưng hiện tại trang tuyên bố rõ ràng rằng nó không hoạt động - có thể nó bị bỏ qua. Nhưng readme của ông là ít nhất là giá trị :-), ông đề cập đến sàng lọc và Query Engine trông trưởng thành hơn, mặc dù quá phức tạp đối với tôi!

Cá nhân tôi sẽ đi với Underscore vì bây giờ tôi đã nhìn vào nó lần đầu tiên, tôi nhận ra rằng nó có nhiều thứ tiện dụng tôi cần, cộng với tôi thực sự chỉ muốn thực hiện các chức năng đơn giản như sẽ là _.find() trong Gạch dưới. Nhưng tôi đoán nếu bạn muốn làm các truy vấn giống như mong muốn phức tạp hơn, bạn sẽ làm điều đó trong LOC ít hơn với Sift.

+0

tốt, tôi đã tìm ra điều gì đó - và tại sao không có trên Github? tôi có lẽ nên tự tìm kiếm, nhưng tôi đã hy vọng một người khác đã đi qua nó rồi. hãy xem liệu bạn có thể ăn cắp giải thưởng từ @Vivin^_ ^! – RubyTuesdayDONO

+1

tuyệt vời! [Sift.js] (https://github.com/crcn/sift.js) trông vừa phải. tôi thích và sử dụng [Gạch dưới] (http://underscorejs.org/)/[Lodash] (http://lodash.com/), nhưng cần phải sử dụng lại các vị từ đã được lưu trữ bên trong Mongo. cảm ơn bạn! – RubyTuesdayDONO

+1

oh, và cảm ơn bạn đã tìm kiếm [câu hỏi gốc] (http://stackoverflow.com/questions/8695718] .tôi đã tìm kiếm nhưng không tìm thấy nó^_ ^; – RubyTuesdayDONO

0

Gần nhất tôi có thể tìm được linq.js, đó là LINQ cho JavaScript. Hy vọng rằng điều này sẽ giúp ích cho bạn.

+1

Tôi không nghĩ đó là những gì tôi đang tìm kiếm - nhưng đó chắc chắn không phải lỗi của bạn! có lẽ chưa có ai làm như vậy. tôi sẽ xem xét [linq.js] (http://linqjs.codeplex.com/) và xem liệu nó có giúp ích gì không. cảm ơn bạn, @Vivin! – RubyTuesdayDONO

1

lodash.js

Bạn muốn sử dụng lodash.js. Một sự thay thế của nó thay thế cho underscore.js. Hiệu suất nhanh gấp hai lần.

http://lodash.com/

6

Check-out Mingo

tôi thực hiện nó sau khi tìm thấy không có sự thay thế phù hợp.

Nó vẫn đang tích cực được phát triển nhưng có thể sử dụng được. Phạm vi kiểm tra chưa hoàn thành.

Có thể sử dụng từ cả hai trình duyệt và nodejs

[Chỉnh sửa]

Thư viện này hiện nay là việc thực hiện đầy đủ nhất của ngôn ngữ truy vấn MongoDB cho front-end.

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