首页 > 解决方案 > 如何通过空值在mongodb中找到记录

问题描述

集合中有这样的文档:

  {name:'abc', age:'22',job:'writer', place: 'place1',tag:['a','v']},
  {name:'def', age:'24',job:'no job', place: 'place1',tag:['a','f']},
  {name:'ghi', age:'22',job:'writer', place: 'place3',tag:['d','v']},
  {name:'jklm', age:'22',job:'editor', place: 'place4',tag:['a','d']},

我需要按以下条件搜索(用户输入详细信息)

searchKey{ 
 sk_age:'22',
 sk_job:['writer','editor']
 sk_place:null,
 sk_tag:null 
}

“未输入位置和标记用户”
我正在编写如下所示的 mongodb 查询,但这不起作用,如何正确找到

db.user.find( { 
        age:sk_age,
        job:sk_job,
        place:sk_place,
        tag:sk_tag,
      } ).toArray()

我期待 || 我需要下面列出的录音机

{name:'abc', age:'22',job:'writer', place: 'place1',tag:['a','v']},
{name:'ghi', age:'22',job:'writer', place: 'place3',tag:['d','v']},
{name:'jklm', age:'22',job:'editor', place: 'place4',tag:['a','d']},

标签: javascriptnode.jsdatabasemongodb

解决方案


您可以使用$in运算符并检查字段是否不为空,例如

const query = {
  age:sk_age,
  job: {'$in': sk_job}
}
if (sk_place !== null) {
  query.place = sk_place;
}
if (sk_tag !== null) {
  query.tag = sk_tag;
}

db.user.find(query).toArray()

推荐阅读