我有两个集合:用户和通知。 我需要获取所有管理员用户的通知列表
我来自sql上下文。所以在mssql中我能够做到:
SELECT notificationId, notificationText FROM notifications
WHERE username IN (select username from users where userrole = 'admin');
我在mongodb中尝试了以下内容:
db.notificaitons.find({ username: {$in:{/*get list of admin users here*/} }},
{notificationId: 1, notificationText: 1})
有没有办法在单个数据库查询中执行此操作?或者我应该在两个不同的查询中做到这一点。 (我正在使用带有mongoose的节点js)
我真的无法得到逻辑。谢谢。
答案 0 :(得分:0)
您需要两个查询或修改架构。我建议您在通知集合中存储username
,以及userrole
:
{
username: "derickr",
userroles: [ "admin", "newbie" ].
notificationId: 42,
notificationText: "This is awesome",
}
正如您所看到的,我使用户角色成为一个具有多个用户角色的数组 - 我规定这也是您所拥有的。现在可以轻松地进行查询,以便管理员用户查找所有通知:
// create index
db.notifications.ensureIndex( { userroles: 1 } } );
// do query
db.notifications.find( { userroles: "admin" } );