Mongoose Find() - 如果查询未定义则返回所有文档

问题描述 投票:0回答:2

我有猫鼬查找代码功能,查询是从参数接收的(这里目前是硬编码的) 假设这是查询

var arrayOfCategories = [ '63073212ed3e0f85ccffc8cf' , '63073324ed3e0f85ccffc8ff']
var arrayOfSkill = []

这是我的查找代码

const astro =await Astrologer.find({ 'category.astolCat_id' : {$in: arrayOfCategories},
'skills.astolSkill_id': {  $in: arrayOfSkill}})

如果我在 'arrayOfSkill' 数组中有一个值,它就可以正常工作,但我希望它忽略 ''skills.astolSkill_id': { $in: arrayOfSkill}' 并且仅在 arrayOfSkill 为空时查询 arrayOfCategories。如果 arrayOfSkill 为空,那么我将返回空白数组

node.js express mongoose mongodb-query mongoose-schema
2个回答
0
投票

逐步建立您的查询选项...

const query = {};
if (arrayOfCategories.length) {
  query["category.astolCat_id"] = { $in: arrayOfCategories };
}
if (arrayOfSkill.length) {
  query["skills.astolSkill_id"] = { $in: arrayOfSkill };
}

const astro =await Astrologer.find(query);

0
投票
const filter = [{}];

arrayOfCategories.length && filter.push({'category.astolCat_id': {$in: arrayOfCategories}})
arrayOfSkill.length && filter.push({'skills.astolSkill_id': { $in: arrayOfSkill }})

const astro =await Astrologer.find({$and:filter});

如果需要,可以修改为;

find({$or: filter})

© www.soinside.com 2019 - 2024. All rights reserved.