2017-03-03 3 views
0

사용자 ID 배열에 ID가있는 모든 사용자를 얻으려면 어떻게해야합니까? 제 문제는 그룹 컬렉션입니다. 각 그룹에는 사용자라고하는 userID라는 배열이 있습니다.이 사용자는 그룹에 속해 있습니다. UserID 배열에서 사용자 개체를 가져 오는 방법을 알아야합니다. ?MeteorJs 사용자 ID 배열이있는 모든 사용자 찾기

클라이언트

export default createContainer((props) => { 
    let user = Meteor.users.findOne(Meteor.userId()) 
    let groupsSub = Meteor.subscribe('groups') 

    if (user) { 
    let code = user.profile.selectedGroup 
    let group = Groups.findOne({code}) 
    return { 
     ready: groupsSub.ready(), 
     group, 
     users: Meteor.users.find({_id: {$in: group.users}}).fetch() 
    } 
    } 

    return {} 
}, HomePage) 

단절

Meteor.publish('groups', function() { 
return Groups.find({ 
    users: { 
    $elemMatch: { $eq: this.userId } 
    } 
}) 
}) 

이 내가 얻으려고 어디 사용자 또한 내가 프런트 엔드

동안 반응 사용하고

render() { 
    if (this.props.ready) { 
    let group = this.props.group 
    let users = this.props.users 
    console.log(users) 

    return (
     <div className='c-fit-group'> 
     <div className='c-fit-group__header'> 
      <h1>{group.name}</h1> 
     </div> 
     </div> 
    ) 
    } 

    return <div>Loading...</div> 
    } 
} 

I c onsole.log group.users 나는이 enter image description here

를 얻을 내가 사용자를 CONSOLE.LOG 때 간단하게 (내가 그라면 이야기하는 데 문제가 사용자 ID의 배열을 가지고 있다면이 enter image description here

+0

지금까지 해보신 것은 무엇입니까? – jordanwillis

답변

3

를 얻을 수 해결하려는 문제), $ in 연산자를 사용할 수 있습니다. 예 :

let userIds = ['abc', 'def', 'hgi']; 
let userCursor = Meteor.users.find({_id: {$in: userIds}}); 

단지 대신 커서의 결과를 얻을 수 있습니다 :

갱신
let userResults = Meteor.users.find({_id: {$in: userIds}}).fetch(); 

: 어디 어디를 클라이언트에서 모든 사용자를받지에 대한 의견에서

이를 실제로 사용자를 게시하고 있습니까? 그게 네가 누락 된 부분이라고 생각해.

게시에서 여러 개의 커서를 반환 할 수 있습니다 (예 :

Meteor.publish('groups', function() { 
    let groupsCursor = Groups.find({ 
     users: { 
      $elemMatch: { $eq: this.userId } 
     } 
    }); 

    // find these from... ??? 
    let userIds = []; 

    let usersCursor = Meteor.users.find({_id: {$in: userIds}}); 

    return [groupsCursor, usersCursor]; 
}); 
+0

내가 이것을 할 때 localCollection.Cursor 객체를 얻는다. 나는 아이디어가 없다 : P는 나에게 사용자 객체 배열을 줄 것을 기대할 것인가? –

+0

@GavynCaldwell, 아니요, find()는 원하는 경우 반복 할 수있는 커서를 반환합니다. 결과 만 원한다면 fetch를 호출 할 수도 있습니다. 답을 예제로 업데이트하겠습니다. – zim

+0

좋아요. 방금 .fetch()를 사용하여 하나의 사용자 만 반환하려고했습니다. 배열에 적어도 2 명의 사용자가 있습니다 –

1

전체 컬렉션의 모든 사용자를 찾는 경우 아래의 집계를 시도 할 수 있습니다.

초기 단계에서는 각 문서에서 모든 일치 항목 (userIds)을 찾은 다음 $group 다음에 컬렉션 전체에서 고유 한 사용자를 찾습니다.

db.collection.aggregate([{ 
    $project: { 
     userIds: { 
      $setIntersection: ["$userIds", [1, 2, 3]] 
     } 
    } 
}, { 
    $unwinds: "$userIds" 
}, { 
    $group: { 
     $id: null, 
     userIds: { 
      $addToSet: "$userIds" 
     } 
    } 
}]) 
관련 문제