2013-05-22 1 views
2

일부 코드를 실행하면 Meteor에서 throwIfSelectorIsNotId 예외가 발생합니다. 동일한 코드를 실행하는 두 개의 클라이언트가 있고 두 번째 클라이언트가 동일한 코드를 실행하면 예외가 throw됩니다.Meteor throws throwIfSelectorIsNotId 예외

이 예외가 의미하는 것이 무엇이며 왜 던져 질 수 있는지 파악하십시오. 잘만되면 누군가 그것을 설명 할 수있을 것이다.

답변

3

클라이언트에서 특정 작업 (버전 0.57 이후로 생각됩니다)이었습니다. 예를 들어 업데이트 작업을 수행 할 때

MyCollection.update({name:"John Doe"},{$set:{age:50}}); 

클라이언트에서 두 부분으로 나눠야합니다. (클라이언트에서만).

var doc_id = MyCollection.findOne({name:"John Doe"})._id; 
MyCollection.update({_id:doc_id,{$set:{age:50}}); 

당신은 그 문서를 먼저 업데이트 _id으로 문서를 찾을 필요가있다. selector는 update & remove 작업에 대해서만 _id 일 수 있습니다.

유성 디자인의 보안 위험 때문에 클라이언트 측 mongodb 데이터베이스가있을 경우 업데이트 허용 여부를 결정하면서 다른 작업에서 서버로부터 임의로 정보를 얻을 수 있습니다. 그것은 Meteor 0.57에서 소개되었습니다.

+1

클라이언트에서 $ in 연산자로 업데이트를 수행하려고 할 때도 발생합니다. MyCollection.update ({_ id : {$ in : idList}}, someModifier, {multi : true})'같은 오류가 발생합니다. –

+0

예 클라이언트에서이 유형의 쿼리를 사용할 수 없습니다. Essence에서는 결과를 얻고 루프를 반복하고 각각을 수행해야합니다. 업데이트가 거부되기 전에 컬렉션에 대해 알 수있는 쿼리를 만들 수있는 보안 문제 (액세스 거부)로 인해 여러 업데이트가 클라이언트에서 지원되지 않습니다. – Akshat