2013-08-14 3 views
0

두 개의 콜렉션이 있습니다 : 사용자 및 알림. 모든 관리자 사용자의 알림 목록을 가져와야합니다.MongoDB에서이 Sql 쿼리를 수행하는 방법

저는 SQL 컨텍스트에서 왔습니다.

db.notificaitons.find({ username: {$in:{/*get list of admin users here*/} }}, 
{notificationId: 1, notificationText: 1}) 

은 하나의 DB를 쿼리에서 그것을 할 수있는 방법이 있습니까 :

SELECT notificationId, notificationText FROM notifications 
WHERE username IN (select username from users where userrole = 'admin'); 

내가 MongoDB를에 다음과 같은 시도 : 그래서 MSSQL에서 내가 할 수 있었다? 또는 나는 두 가지 다른 질문을 할 것이다. (몽구스로 js 노드를 사용하고 있습니다)

논리를 실제로 이해할 수 없습니다. 감사.

+0

두 가지 검색어가 필요합니다. 하나는 관리자 용이고 다른 하나는 알림 용입니다. 가능하고 필요한 경우 관리자 목록을 캐시하십시오. – WiredPrairie

+0

단일 쿼리로이 작업을 수행하려면 알림을 사용하여 쿼리 할 데이터를 저장해야합니다.이 경우 사용자 역할 및 이름 일 수 있습니다. 그러면 다음과 같이 질의를 할 수 있습니다 :'db.notificaitons.find ({userrole : "admin"}}, {notificationId : 1, notificationText : 1})' –

+2

좋은 답변이지만 ... 답변은 다음과 같이 게시되어야합니다. * 대답 *, 코멘트가 아닙니다. * –

답변

0

두 개의 쿼리 또는 스키마 수정이 필요합니다. -이이라고 규정 한하고 당신이 볼 수 있듯이

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

나는 둘 이상의 사용자 역할과, userroles에게 배열을 만든 : 나는 당신이 알림 수집뿐만 아니라 username에 저장뿐만 아니라 userrole는 것이 좋습니다 것입니다 너도 마찬가지야. 관리자는 다음과 같은 조건으로 모든 알림을 쉽게 찾을 수 있습니다.

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

// do query 
db.notifications.find({ userroles: "admin" }); 
관련 문제