如何忽略MongoDB中的查询字段

有没有办法忽略在查询中传递的字段? 此问题是由来自HTTP请求的查询引起的。

例如,这个查询将获得所有标题为user@example.com some title和用户的电子邮件

 //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查询所有文档,那么这些post不再是匿名的。

我想我可以尝试删除从HTTP请求传入的查询的那一部分,但是我遇到了使用$or其他任何我不知道或忘记的操作符的问题。 或者如果他们使用string来访问用户对象的更深层的部分。

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

如果你不想公开所有的查询逻辑,那么不要让客户端通过查询。 创build一个单独的端点,只接受标题作为search参数。

这就是说,你可以很容易地通过做类似的东西来改造。

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

这样只有title属性将被查询。