2013-08-14 4 views
0

У меня есть две коллекции: Пользователи и уведомления. Мне нужно получить список уведомлений всех пользователей adminКак сделать этот запрос Sql в MongoDB

Я исхожу из контекста 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 с mongoose)

Я не мог получить логику. Благодарю.

+0

Для этого требуются два запроса. Один для админов, второй - для уведомлений. Загрузите список администраторов, если это возможно и необходимо. – WiredPrairie

+0

Чтобы иметь возможность использовать это как один запрос, вам нужно будет хранить данные, с которыми вы хотите запросить, с уведомлением, поэтому в этом случае может быть роль пользователя и имя пользователя. Затем вы можете сделать запрос следующим образом: 'db.notificaitons.find ({userrole:" admin "}}, {notificationId: 1, notificationText: 1})' –

+2

Хорошие ответы, но ... Ответы должны быть опубликованы как * ответы *, не как * комментарии. * –

ответ

0

Вам нужны либо два запроса, либо модификация вашей схемы. Я бы рекомендовал хранить в своей коллекции уведомлений не только username, но и userrole:

{ 
    username: "derickr", 
    userroles: [ "admin", "newbie" ]. 
    notificationId: 42, 
    notificationText: "This is awesome", 
} 

Как вы можете видеть, что я сделал UserRoles массив, с более чем одной роли пользователя - я оговаривая, что это что у вас есть. Теперь можно легко выполнить запросы, чтобы найти все уведомления пользователей admin с помощью:

// create index 
db.notifications.ensureIndex({ userroles: 1 } }); 

// do query 
db.notifications.find({ userroles: "admin" }); 
Смежные вопросы