我有一个API方法,用户可以传入自己的查询。集合中的字段只是ns,因此用户可能会传递类似:
v.search = function(query: Object){
// query => {ns:{$in:['foo','bar',baz]}} // valid!
// query => {ns:{$in:{}}} // invalid!
// query => {ns:/foo/} // valid!
});
是否有某种方法可以做到这一点,比如冒烟测试可能会导致明显错误的查询失败?
我希望一些MongoDB库可以导出这个功能......但是很有可能他们只通过将查询发送到数据库来验证查询,实际上,这是查询有效的真正仲裁者/无效。
但我希望在将查询发送到数据库之前验证该查询。
答案 0 :(得分:5)
属于MongoDB Compass的一些模块已经成为开源的。 有两个模块可能适用于您的用例:
虽然它们可能不适合您的用例100%,但它应该给您一个非常接近的验证。例如npm install mongodb-language-model
,然后:
var accepts = require('mongodb-language-model').accepts;
console.log(accepts('{"ns":{"$in":["foo", "bar", "baz"]}}')); // true
console.log(accepts('{"ns":{"$in":{}}}')); // false
console.log(accepts('{"ns":{"$regex": "foo"}}')); // true
也可能感兴趣,npm install mongodb-query-parser
将字符串值解析为JSON查询。例如:
var parse = require('mongodb-query-parser');
var query = '{"ns":{"$in":["foo", "bar", "baz"]}}';
console.log(parse.parseFilter(query)); // {ns:{'$in':['foo','bar','baz']}}
答案 1 :(得分:2)
除了反映query.ns对象并检查其每个属性/相关值
之外,我认为不可能做其他事情。