2013-10-30 2 views
19

내 meteor.js 앱에서 이메일 주소로 사용자를 찾을 수있는 간단한 관리 페이지를 작성하려고합니다.meteor.js : 이메일로 사용자 찾기

나는 Meteor.users 컬렉션이 너무

일반적으로 MongoDB의에서
{ address : '[email protected]', 
    verified : false 
} 

내가 지금처럼이 '이메일'배열 내에서 검색 할 수 있습니다와 같은 객체가있는 '이메일'배열이 볼 수

While building the application: 
client/admin.js:224:41: Unexpected token . 

아카 유성은 북동를 좋아하지 않는다 :

Meteor.users.find({ emails.address : '[email protected]' }); 

그러나이 쿼리는 오류를 던지고있다 sted query ...

전자 메일 주소로 Meteor.users 컬렉션을 쿼리하는 방법에 대한 아이디어가 있습니까?

답변

25

서버에있는 경우, Meteor에는 다음과 같은 특수 기능이 있습니다. Accounts.findUserByEmail(email).

나는 이것이 권장되는 방법이라고 생각합니다.

18

이메일에는 다양한 이메일이 보관됩니다. 각 이메일에는 주소가 있습니다.

시도 { emails: { $elemMatch: { address: "[email protected]" } } }.

$elemMatch에 대한 정보는 here입니다.

전자 메일에 대한 정보는 here입니다.

if (Meteor.isServer) { 
    Meteor.methods({ 
     'get_users_by_email': function(email) { 
      return Users.find({ emails.address: email }).fetch(); 
     } 
    }); 
} 
if (Meteor.isClient) { 
    foo_users = Meteor.call('get_users_by_email', '[email protected]'); 
} 
+3

감사합니다! 이것은 완벽하게 작동했습니다. 이상한 docs 명시 적으로 $ elemMatch 클라이언트에서 사용할 수 없습니다 ... – Petrov

2

한 가지 가능한 해결 방법은 서버에 users_by_email 방법을 사용하는 것입니다 :

Meteor.users.find({ "emails.address" : '[email protected]' }); 
+0

전자 메일 개체를 따옴표에 넣는 것을 잊지 마십시오 – Liko

53

또한 단지 따옴표에 넣어, 당신은 무엇을했다 사용할 수 있습니다 :이 서버가 아닌 클라이언트에서 작동하는 경우

+5

단일 사용자를 찾고 있기 때문에 'Meteor.users.findOne'을 사용할 수 있습니다. – cutemachine

+0

Meteor의'Accounts.findUserByEmail (이메일)'은 제공된 이메일 주소와 일치하는 이메일이 여러 개인 경우에주의 할 점을 지적합니다. 심각한 데이터베이스 변형 이외에 어떻게 가능할 지 모르지만 Meteor는이를 볼 수있는 충분한 유스 케이스라고 생각하는 것 같습니다. https://docs.meteor.com/api/passwords.html#Accounts-findUserByEmail –

3

기본적으로 Meteor는 로그인 한 사용자 만 게시하고 언급 한대로 해당 사용자에 대해 쿼리를 실행할 수 있습니다. 다음 명령

Meteor.users.find({"emails": "[email protected]"}).fetch() 

에게

Meteor.subscribe('allUsers'); 

그리고 실행

Meteor.publish("allUsers", function() { 
    return Meteor.users.find({}); 
}); 

그리고 클라이언트에서 그들에게 구독 : 다른 사용자에 액세스하려면 당신은 서버에 게시해야 또는

Meteor.users.find({"emails.0": "[email protected]"}).fetch() 

Refer this

+1

나는 무엇이 계속되고 있는지 알아 내려고 너무 오래 지 냈습니다. 나는 바보인가 아니면 정말로 그렇게 명확하지 않은가? –

+1

불분명 한 것에 대해 사과드립니다. "Meteor는 로그인 한 사용자 만 게시하고"Meteor.users라는 이름을 사용하는 것을 오도하는 것으로 보이며 로그인 한 사용자 이상을 반환하지 마십시오. –

3

당신이 계정 배열 내부의 모든 이메일을 찾을 싶어하고, 문자를 구분하지 쿼리 할 경우

const hasUser = Meteor.users.findOne({ 
    emails: { 
     $elemMatch: { 
     address: { 
      $regex : new RegExp(doc.email, "i") 
     } 
     } 
    } 
}); 
관련 문제