Node.js 如何在MongoDB中忽略查询字段

Node.js 如何在MongoDB中忽略查询字段,node.js,mongodb,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 goo

有没有办法忽略查询中传递的字段?此问题是由来自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请求中传入的查询部分,但随后我会遇到使用
$或
或任何其他我不知道或忘记的运算符的人的问题。或者如果他们使用字符串访问用户对象的深层部分


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

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

也就是说,您可以通过执行以下操作轻松地对其进行改造

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

这样,只会查询
标题
属性

我想公开所有的查询逻辑($or,$regex,等等),但我想让它忽略一个字段,就像这个字段在数据库中不存在一样。这可能是不可能的,但我希望这样做,因为我的目标是在前端保留大部分逻辑,而不制作大量自定义后端代码。@Randy是的,你想要蛋糕和吃蛋糕。将输入直接传递到数据库是一个安全问题。您可能需要阅读并思考一段时间。您提出了一个很好的观点,但我并不完全同意这种说法。我将它传递给Mongo的find函数。查询已经完全“转义”——与原始SQL查询不同。关键是,它与MongoDB的交互方式正是我所期望的——如果您传递
user.email
,它将查询该字段。无论如何,听起来Mongo不提供这种功能,在我的例子中,这是一个安全问题,这意味着我需要对此负责。不过我感谢你的帮助!