source

Meteor - collection.find()는 항상 모든 필드를 반환합니다.

ittop 2023. 5. 22. 21:40
반응형

Meteor - collection.find()는 항상 모든 필드를 반환합니다.

이 문제에 부딪혔습니다(약간 성가신 문제).특정 필드(점수)를 표시하거나 표시하지 않고 컬렉션의 모든 레코드를 검색하려고 합니다.이것은 예시일 뿐 실제 코드를 반영하지는 않지만 문제는 항상 재현 가능합니다.제외하는 필드는 매우 크고 사용 가능한 레코드 메뉴를 생성하려고 합니다.

다음과 같은 명령어

    players.find({},{score:1})
    players.find({},{score:0})

mongodb에서 제외/포함을 트리거하는 대신 항상 모든 필드를 반환합니다.템플릿이 html로 렌더링되는 데이터를 잠재적으로 제어할 수 있기 때문에 아무 걱정이 없습니까?그래도 데이터가 클라이언트 측으로 전송되는 것처럼 느껴지며 콘솔에 표시됩니다.

당신의 구문이 약간 틀렸습니다, 그래야 합니다.

CollectionName.find({}, {fields: {'onlyThisField':1}});

또는

CollectionName.find({}, {fields: {'everythingButThisField':0}});

템플릿은 실제로 표시되는 데이터를 제어하지만 필드 제한이 타당한 시나리오가 많습니다. 데이터의 개인 정보 보호 또는 효율성(모든 레코드의 일부 필드, '현재' 레코드의 모든 필드)은 두 가지 일반적인 시나리오입니다.

당신은 그것에 대해 언급하지 않았지만, 이것은 보통 게시 기능 내에 있습니다 - http://docs.meteor.com/ #http_http://▁- 참조.fields클라이언트에서도 수정자를 사용할 수 있지만, 템플릿에만 클라이언트로 전송되는 데이터를 제한하지 않습니다. 서버 측 필드 축소/축소는 다양한 이점이 있습니다.

--

제거했는지 두 번 확인합니다.autopublish패키지도 마찬가지입니다. 하지만 활성화되어 있고 게시 기능을 직접 작성하면 경고가 표시됩니다. 이 기능은 가장 일반적으로 사용되는 곳입니다.fields

첫째, 일부 필드를 제어하려면Collection.find()◦다음과 같은 방법으로 시도할 수 있습니다.

CollectionName.find({}, {fields: {field:1}});

서버에서만 작동했습니다.

또는 사용해 보십시오.

서버에서:

Meteor.publish("myCollection", function () {
    return SvseTree.find({},{fields: {field:1}});
});

클라이언트에서:

Meteor.subscribe("myCollection");

그 다음에 달려라meteor remove autopublish.

두 번째로 Array of Collection.find()를 가져오려면 Collection.find()를 시도합니다.fetch();

언급URL : https://stackoverflow.com/questions/15961456/meteor-collection-find-always-returns-all-fields

반응형