Node.js 查找带条件的查询

Node.js 查找带条件的查询,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我有一个文档集合,其中每个文档都具有以下属性:userId,权限 如何使用findOne查询返回具有userId=41和permissions=admin或permissions=op-admin的文档 我尝试了以下查询,但它不返回任何结果 User.findOne( { 'userId': 42 }, { $and: [ { $or: {'permissions': 'admin'} }, { $o

我有一个文档集合,其中每个文档都具有以下属性:
userId
权限

如何使用
findOne
查询返回具有
userId=41
permissions=admin
permissions=op-admin
的文档

我尝试了以下查询,但它不返回任何结果

User.findOne(
  {
    'userId': 42
  },
  {
    $and: [
      {
        $or: {'permissions': 'admin'}
      },
      {
        $or: {'permissions': 'op-admin'}
      }
    ]
  }, function(err, doc) {
  if(err) {
    console.log(doc);
    console.log(err);
  }
}); 
有什么我做得不对吗?

试试:

User.find({
          $and: [  {'userId': 42 } ,
              { $or: [ {'permissions': 'admin'}, {'permissions': 'op-admin'} ] }
          ]})

.find({“userId”:42,“permissions”:{“$in”:['admin','op-admin']}})
。中的
$基本上是
$或
的缩写,但应用于同一个键。实际上,您几乎不需要使用简练的
$和
。谢谢robert@NeilLunn还需要
用户ID
;D@NeilLunn我尝试了你的代码,还向查询中添加了
userId
,效果非常好。你应该把这条评论作为一个答案发表。我知道它是有效的。你需要理解的是“为什么它有效,为什么你尝试过的却没有”。查看操作符的文档,发现
$或
实际上需要一个“列表”,您没有给出,因此出现了语法错误。然后查看
$in
$and
的实际文档,了解您在这里使用
$in
的原因,以及
$and
的实际用法。比将答案标记为正确的语法更正所花费的时间更有用。