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)
您是否尝试过使用askeystone.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}}},{..
互斥意味着什么,先生?您是否尝试使用askeystone.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?