如何在 MongoDB 中执行此 Sql 查询
Posted
技术标签:
【中文标题】如何在 MongoDB 中执行此 Sql 查询【英文标题】:How to do this Sql query in MongoDB 【发布时间】:2013-08-14 10:29:35 【问题描述】:我有两个集合:用户和通知。 我需要获取所有管理员用户的通知列表
我来自 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)
有没有办法在单个数据库查询中做到这一点?还是我应该在两个不同的查询中进行。 (我正在使用带有猫鼬的节点 js)
我无法真正理解逻辑。谢谢。
【问题讨论】:
它需要两个查询。一个用于管理员,第二个用于通知。如果可能和必要,缓存管理员列表。 为了能够将其作为单个查询进行,您需要将要查询的数据与通知一起存储,因此在这种情况下可能是用户角色和名称。然后您可以进行如下查询:db.notificaitons.find( userrole: "admin" , notificationId: 1, notificationText: 1)
很好的答案,但是... 答案应该以 answers 的形式发布,而不是 cmets。
【参考方案1】:
您需要两个查询,或修改您的架构。我建议您在通知集合中不仅存储username
,还存储userrole
:
username: "derickr",
userroles: [ "admin", "newbie" ].
notificationId: 42,
notificationText: "This is awesome",
如您所见,我将 userroles 设为一个数组,具有多个用户角色 - 我规定这也是您所拥有的。现在可以通过以下方式轻松查询管理员用户的所有通知:
// create index
db.notifications.ensureIndex( userroles: 1 );
// do query
db.notifications.find( userroles: "admin" );
【讨论】:
以上是关于如何在 MongoDB 中执行此 Sql 查询的主要内容,如果未能解决你的问题,请参考以下文章