我需要运行一个猫鼬查询,该查询基于用户的访问在db中搜索记录。访问字段将为['all']
或要搜索的有效字符串数组。
查询的基本结构如下:
let { userid, access } = user;
let allRecords = await db.Record.find({
'organisation': {$in: access.organisations},
'country': {$in: access.countries}
})
但是,如果用户有访问所有组织,那么我不想过滤该字段。对所有组织的访问权限将以access.organisations === ['all']
表示。国家字段也是如此。
这可以通过一些if语句来运行正确的查询来实现。那样就可以了,因为我没有很多访问字段,但是将来可能会扩展,所以如果语句变得混乱。
有更好的方法吗?
答案 0 :(得分:1)
像这样的东西不适合你吗?还是我误解了您的规格?
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)
更新:我添加了国家/地区要求。