如何在MongoDB中执行此Sql查询

时间:2013-08-14 10:29:35

标签: sql node.js mongodb mongoose

我有两个集合:用户和通知。 我需要获取所有管理员用户的通知列表

我来自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)

我真的无法得到逻辑。谢谢。

1 个答案:

答案 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" } );