Javascript和MongoDB,如何将条件数组传递给查询

Javascript和MongoDB,如何将条件数组传递给查询,javascript,mongodb,mongoose,nodes,Javascript,Mongodb,Mongoose,Nodes,传递一系列条件。在条件为数组时发出请求 数据将根据过滤器进行更新 过滤器阵列 查询 我希望您希望对每个过滤器数组应用“或”条件。 如果是这样,在将它们作为参数传递之前,您必须在js中对它们进行威胁,以使用封装在“$and”条件中的“$or”条件构造请求的查询部分,如下所示: { $and: [ { $or: [ {bodystyle : "body style 1"}, {bodystyle : "body style 2"},

传递一系列条件。在条件为数组时发出请求 数据将根据过滤器进行更新

过滤器阵列 查询
我希望您希望对每个过滤器数组应用“或”条件。 如果是这样,在将它们作为参数传递之前,您必须在js中对它们进行威胁,以使用封装在“$and”条件中的“$or”条件构造请求的查询部分,如下所示:

{
  $and: [
    {
      $or: [
          {bodystyle : "body style 1"},
          {bodystyle : "body style 2"},
          ]
    },
   {
      $or: [
          {model : "model "},
          {model : "model 2"},
          ]
    },
    {
      $or: [
          {model : "model "},
          {model : "model 2"},
          ]
    },
    {
      $or: [
          {make : "make 1"},
          {make : "make2"},
          ]
    },
     {
      $or: [
          {year : 2015},
          {year : 2019},
          ]
    },
  ]
}

编辑:正如@chridam comment中所建议的,$in操作符可以以更简单的方式完成这项工作

我希望您希望对每个过滤器数组应用“或”条件。 如果是这样,在将它们作为参数传递之前,您必须在js中对它们进行威胁,以使用封装在“$and”条件中的“$or”条件构造请求的查询部分,如下所示:

{
  $and: [
    {
      $or: [
          {bodystyle : "body style 1"},
          {bodystyle : "body style 2"},
          ]
    },
   {
      $or: [
          {model : "model "},
          {model : "model 2"},
          ]
    },
    {
      $or: [
          {model : "model "},
          {model : "model 2"},
          ]
    },
    {
      $or: [
          {make : "make 1"},
          {make : "make2"},
          ]
    },
     {
      $or: [
          {year : 2015},
          {year : 2019},
          ]
    },
  ]
}

编辑:正如@chridam comment中所建议的,$in操作符可以以更简单的方式完成这项工作

以上假设您的查询不是相互排斥的(即返回所有必须匹配的结果),因为它们与隐式的
$和
一起使用

如果它们相互排斥(即,如果一个查询与其他查询不匹配,则仍然可以返回结果),则将它们包装在
$或
运算符中,即

keystone.list('Vehicle').model.update({ 
    $or: [ 
        { bodystyle: { $in: bodystyle } }, 
        { model: { $in: model } }, 
        { make: { $in: make } }, 
        { year : { $in: year } } 
    ] 
}, { .... }, callback)

以上假设您的查询不是互斥的(即返回所有必须匹配的结果),因为它们与隐式的
$和
一起使用

如果它们相互排斥(即,如果一个查询与其他查询不匹配,则仍然可以返回结果),则将它们包装在
$或
运算符中,即

keystone.list('Vehicle').model.update({ 
    $or: [ 
        { bodystyle: { $in: bodystyle } }, 
        { model: { $in: model } }, 
        { make: { $in: make } }, 
        { year : { $in: year } } 
    ] 
}, { .... }, callback)

您是否尝试过使用as
keystone.list('Vehicle').model.update({bodystyle:{$in:bodystyle},model:{$in:model},make:{$in:make},year:{$in:year},{……
我尝试过这个解决方案,但它使用1个条件keystone.list('Vehicle').model.update({bodystyle:{$in:this.bodystyle}})但是当我使用所有条件时,没有修改任何内容,它没有更新datamultiple$In not work@chridamWell,这取决于查询的排他性,它们是否相互排斥?以上假设它们不是,因为它们与隐式
$和
一起使用。如果它们相互排斥,则将它们包装在
$或操作符,即
keystone.list('Vehicle').model.update({$or:[{$bodystyle:{$in:bodystyle}},{model:{$in:model}},{make:{$in:make},{year:{$in:year}}},{..
互斥意味着什么,先生?您是否尝试使用as
keystone.list('Vehicle').model.update({$bodystyle:{$in:bodystyle},model:{$in:model},make:{$in:make},year:{$in:year},{..
我尝试过这个解决方案,但它使用1个条件keystone.list('Vehicle').model.update({bodystyle:{$in:this.bodystyle})可以工作但是当我使用所有条件时,没有修改任何内容,它没有更新datamultiple$In not work@chridamWell,这取决于查询的排他性,它们是否相互排斥?以上假设它们不是,因为它们与隐式
$和
一起使用。如果它们相互排斥,则将它们包装在
$或操作符,即
keystone.list('Vehicle').model.update({$or:[{$bodystyle:{$in:bodystyle}},{model:{$in:model}},{make:{$in:make},{year:{$in:year}},},{..
互斥意味着什么,先生?如果数据来自一个我不能改变数据结构的api怎么办?如果数据来自一个我不能改变数据结构的api怎么办?我明白了,但是如果我想把year=[“2015,2019]作为$or,剩下的作为$and怎么办?我明白了,但是如果我想把year=[”怎么办2015年、2019年]为$or,其余为$and?