我需要获取集合的所有文档,这些集合具有字段(section
)的特定值(取决于用户角色)或字段user
的userId。
所以我试图检查用户是否在角色中并将其放入查询中:
var sectionOne = Roles.userIsInRole(Meteor.userId(), ['something']) ? { section: 'cars' } : undefined;
var sectionSecond = Roles.userIsInRole(Meteor.userId(), ['anything']) ? { section: 'vegetables' } : undefined;
var sectionThird = Roles.userIsInRole(Meteor.userId(), ['else']) ? { section: 'countries' } : undefined;
var count = Collection.find(
{
$or: [
sectionOne,
sectionSecond,
sectionThird,
{ user: userId },
],
read: {
$nin: [ userId ]
}
}
).count();
console.log(count);
这样做的正确方法是什么?
为了更好地理解这里我正在尝试做的一个例子:
示例
如果用户具有something
和else
角色,则查询应如下所示:
var count = Collection.find(
{
$or: [
{ section: 'cars' },
{ section: 'countries' },
{ user: userId },
],
read: {
$nin: [ userId ]
}
}
).count();
所有具有cars
或countries
或userId且userId不在读取数组中的文档都将被选中,对吧?
更新
我认为我的问题不够准确。所以让我更好地解释一下:
我希望使用user: userId
获取所有收集文档 - 如果有任何文档与此匹配。
附加(!)如果用户具有section: 'cars'
角色,我需要获取与something
匹配的所有文档。所以在这种情况下会有更多的结果。
如果用户还有角色anything
,我还想获得section: 'vegetables'
的结果并将其添加到结果中。因此,所有这些事情都不相互依赖。
排除最后一件事read: { $nin: [ userId ] }
:对于上述每一场比赛,这应该是必需的。