具有数组和OR运算符的Mongoose.Find()

时间:2019-02-28 08:43:26

标签: javascript node.js mongodb mongoose mongodb-query

我正在尝试搜索与json对象匹配的数据库行。

示例:

var searchParams = {
    city: ['New York City', 'Budapest'], 
    jobs: ['Assistent'] //Can be multiple 
}

//If "city" is equal to one of the searchParams.city variables
//AND jobs is equal to one of the searchParams.jobs variables

var searchQuery = {
    $and: [
        {$or: clean_city},
        {$or: clean_cat}
    ]
}

Jobs.find(searchQuery, function(err, list){
    console.log(list);
});

我已经尝试了所有我可以在Google上找到的选项,但是似乎无法对数组进行任何操作。

如果有人能帮助我,我将非常感谢。

致谢

2 个答案:

答案 0 :(得分:1)

您可以找到一个示例here,该示例根据您的情况假设:

  • 使用searchParams,因为我不知道clean_*变量中的含义
  • 数据库字段为cityjob
{
  $and: [
    { $or: searchParams.city.map(city => ({ city })) },
    { $or: searchParams.jobs.map(job => ({ job })) }
  ]
}

以下哪种语法更短(如果数据库字段名称不同,则不能将其快捷方式使用):

{
  $and: [
    { $or: searchParams.city.map((city) => { return { city: city }; }) },
    { $or: searchParams.city.map((job) => { return { job: job }; }) }
  ]
}

答案 1 :(得分:0)

假设您在mongo db中的对象看起来像这样:

{
   "city": "New York City",
   "job": "Assistent"
}

您可以执行以下查询:

Jobs.find({
   $and: [
      {
         city: { $in: ["NYC", "Paris"] }
      }, {
         job: { $in: ["Assistent"] }
      }
   ]
})

这将返回在city数组中具有城市并在jobs数组中具有工作的任何对象。