Mongoose动态查询结构';全部';或某些元素

Mongoose动态查询结构';全部';或某些元素,mongoose,Mongoose,我需要运行mongoose查询,根据用户的访问权限在数据库中搜索记录。访问字段将是['all']或要搜索的有效字符串数组 查询的基本结构如下: let { userid, access } = user; let allRecords = await db.Record.find({ 'organisation': {$in: access.organisations}, 'country': {$in: access.countries} }) 但是,如果用户拥有访问所有组织的权限

我需要运行mongoose查询,根据用户的访问权限在数据库中搜索记录。访问字段将是
['all']
或要搜索的有效字符串数组

查询的基本结构如下:

let { userid, access } = user;

let allRecords = await db.Record.find({
  'organisation': {$in: access.organisations},
  'country': {$in: access.countries}
})
但是,如果用户拥有访问所有组织的权限,则我不想筛选该字段。访问所有组织的权限将由
Access.organizations==['all']
表示。农村地区也是如此

这可以通过一些if语句来运行正确的查询来实现。这可能没问题,因为我没有太多的访问字段,但这可能会在将来扩展,所以if语句可能会变得混乱


有更好的办法吗?

像这样的东西不适合你吗?还是我误解了你的规格

let { userid, access } = user;
let query = {};

if(access.organisations[0] !== 'all') {
 query.organisations = {$in: access.organisations};
}

if(access.country[0] !== 'all') {
 query.country = {$in: access.countries};
}

let allRecords = await db.Record.find(query)

更新:我添加了国家/地区要求。

差不多。国家或组织可以是
['all']
。有两个字段可供访问,如果语句没有问题,我想,它们就是感觉不“漂亮”,如果这有意义的话?我想我知道你来自哪里,但除非你有特定的性能或安全要求,在这种情况下,我宁愿坚持使用不太聪明/漂亮,但仍然是可读性最好的解决方案。使用同一逻辑有多种方法,但如果你设身处地为下一个阅读你的代码的人着想,你可能会想要解决方案,你不必考虑,但这是直观的。非常好的一点-我没有从这个角度考虑过。总是想象下一个阅读你代码的人是一个精神变态的斧头杀手:-哈哈!多好的思考方式啊!可能会打印出来并贴在我的屏幕上