如何忽略MongoDB中的查询字段

时间:2016-02-21 01:44:47

标签: node.js mongodb

有没有办法忽略查询中传递的字段?此问题是由来自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的人或我不了解的任何其他操作员的问题或忘记。或者,如果他们使用字符串来访问用户对象的更深层部分。

有没有办法限制查询可以查询哪些字段?

1 个答案:

答案 0 :(得分:1)

如果您不想公开所有查询逻辑,则不允许客户端传递查询。创建一个仅接受标题作为搜索参数的单独端点。

话虽这么说,你可以通过做类似的事情来轻松地改进它。

var title_only_query = {
    'title': user_query.title
}

这样只会查询title属性。

相关问题