Какая библиотека Javascript может оценивать предикаты запросов, специфичных для MongoDB, для объекта?

Есть ли библиотека javascript, которая позволит мне выразить объектные предикаты в DSL, подобном языку запросов MongoDB? Для большей ясности в большой программе я хотел бы сказать:

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

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

вместо:

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

Я использую Node.js, поэтому ничего на NPM было бы здорово. Это будет дополнительный бонус, если библиотека может выбирать объекты из массива, а также просто сопоставлять отдельные объекты.

Я рассмотрел эти два связанных вопроса, но они не были особенно полезны для моей ситуации:

Ответы

Ответ 1

OK Я нашел ответ: Sift.js

Теперь для длинного ответа: это спросил и ответил до. Основные моменты:

  • Используйте Sift, если вам действительно нужен синтаксис Mongo.
  • Если вы хотите быть более популярным, используйте Underscore.js, как и все остальные. В нем есть куча удобных функций в дополнение к тому, что он в основном делает то, что делает просеивание с немного отличающимся синтаксисом.
  • Вам может не понадобиться какая-либо библиотека - современные браузеры поддерживают многие полезные функции непосредственно на Array prototype, например filter() например.

Как последнее примечание, mongodb-riff, похоже, пытается сделать что-то подобное, но в настоящее время на странице четко указано, что он не работа - возможно, она оставлена. Но его readme, по крайней мере, имеет значение:-), он упоминает sift и Query Engine, который выглядит более зрелым, хотя и слишком сложным для меня!

Лично я собираюсь пойти с Underscore, потому что теперь, когда я впервые посмотрел на него, я понимаю, что у него есть куча полезных вещей, в которых я нуждаюсь, плюс я действительно хотел просто выполнять простые функции, такие как be _.find() в подстроке. Но я думаю, если вы захотите сделать более сложные запросы, похожие на манго, вы сделаете это в меньшем LOC с помощью Sift.

Ответ 2

Отъезд Mingo

Я реализовал его, не найдя подходящей альтернативы.

Он все еще активно развивается, но его можно использовать. Тестирование не завершено.

Используется как из браузера, так и из узла nodejs

[изменить]

Эта библиотека теперь является наиболее полной версией языка запросов MongoDB для интерфейса.

Ответ 3

lodash.js

Вы хотите использовать lodash.js. Его падение в замене для underscore.js. Производительность в два раза быстрее.

http://lodash.com/

Ответ 4

https://github.com/mirek/node-json-criteria библиотека выполняет именно это - оценивает запросы критериев для объектов JSON с использованием формата запросов MongoDB.

Ответ 5

Ближе всего я нашел linq.js, который является LINQ для JavaScript. Надеюсь, это поможет вам.