Какая библиотека 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. Надеюсь, это поможет вам.