有没有办法忽略查询中传递的字段?此问题是由来自HTTP请求的查询引起的。
例如,此查询会获取标题为some title
且用户的电子邮件为user@example.com
//From HTTP request
var query = {
title: 'some title',
'user.email': 'user@example.com'
};
somecollection.find(query, function(err, documents) {
//Not good because we know who posted these documents
});
我遇到的困难是我正在开发一个API,它基本上允许您将查询传递给MongoDB并返回响应。但是,敏感的部分是我不希望您通过用户的电子邮件进行查询(因为该文档应该是匿名的)。我知道您可以限制返回的字段,但如果您可以user@example.com
查询所有文档,则这些帖子不再是匿名的。
我想我可以尝试删除从HTTP请求传入的查询部分,但后来我遇到了使用$or
的人或我不了解的任何其他操作员的问题或忘记。或者,如果他们使用字符串来访问用户对象的更深层部分。
有没有办法限制查询可以查询哪些字段?
答案 0 :(得分:1)
如果您不想公开所有查询逻辑,则不允许客户端传递查询。创建一个仅接受标题作为搜索参数的单独端点。
话虽这么说,你可以通过做类似的事情来轻松地改进它。
var title_only_query = {
'title': user_query.title
}
这样只会查询title
属性。