[MONGODB] 각 문서의 추가 필드와 반응성 게시 구축
MONGODB각 문서의 추가 필드와 반응성 게시 구축
나는 몇 가지 추가 필드가있는 간행물을 만들고 싶어,하지만 난 하나를 사용 Collection.aggregate에 원하는 컬렉션 변경 (난 그냥 하나 그 안에 self.added 사용할 수 있도록) 할 때 내 게시 업데이트를 잃지 않습니다.
나는 그것을 달성하기 위해 Cursor.observeChanges을 사용할 계획입니다. 나는 두 가지 제약이있다 :
여기에 방법이 제공됩니다 :
self.onStop(function () {
handle.stop();
});
switch (field) {
case "item"
if (!initializing)
itemCount = raw_document.item.length;
break;
default:
}
나는이 방법은 내 코드에서 큰 변화에 커밋하기 전에 좋은 가능하다는 것을 확인하고 싶었다. 이 갈 수있는 올바른 방법 인 경우 캔 사람의 확인 나?
해결법
-
==============================
1.그것은 그들이 데이터베이스 쿼리의 일부인 경우에도 개인 필드를 유지하는 것이 상대적으로 쉽다. 당신은 당신이 클라이언트에 보내는 / 수정 / 삭제 필드를 제거 할 수 있습니다 self.added의 마지막 인수는, 클라이언트로 전달되는 객체입니다.
그것은 그들이 데이터베이스 쿼리의 일부인 경우에도 개인 필드를 유지하는 것이 상대적으로 쉽다. 당신은 당신이 클라이언트에 보내는 / 수정 / 삭제 필드를 제거 할 수 있습니다 self.added의 마지막 인수는, 클라이언트로 전달되는 객체입니다.
여기 바이올린의 수정 된 버전입니다. 이것은 당신이 무엇을 요구해야한다. (어쩌면 내가 당신을 오해,하지만 그것을해야합니다 귀하의 질문의 나머지 찾고 있어요는 observeChanges이 바이올린으로 작동 한 후에는 아무것도 체인했던 이유는 확실하지 않다 정직합니다. 미안 내가 잘못을 가지고있는 경우. )
var self = this; // Modify the document we are sending to the client. function filter(doc) { var length = doc.item.length; // White list the fields you want to publish. var docToPublish = _.pick(doc, [ 'someOtherField' ]); // Add your custom fields. docToPublish.itemLength = length; return docToPublish; } var handle = myCollection.find({}, {fields: {item:1, someOtherField:1}}) // Use observe since it gives us the the old and new document when something is changing. // If this becomes a performance issue then consider using observeChanges, // but its usually a lot simpler to use observe in cases like this. .observe({ added: function(doc) { self.added("myCollection", doc._id, filter(doc)); }, changed: function(newDocument, oldDocument) // When the item count is changing, send update to client. if (newDocument.item.length !== oldDocument.item.length) self.changed("myCollection", newDocument._id, filter(newDocument)); }, removed: function(doc) { self.removed("myCollection", doc._id); }); self.ready(); self.onStop(function () { handle.stop(); });
-
==============================
2.첫 번째 문제를 해결하기 위해, 당신은 커서에 반환해야 필드 것을 MongoDB를 말할 필요가있다. 원하지 않는 필드를 남겨주세요 :
첫 번째 문제를 해결하기 위해, 당신은 커서에 반환해야 필드 것을 MongoDB를 말할 필요가있다. 원하지 않는 필드를 남겨주세요 :
MyCollection.find({}, {fields: {'a_field':1}});
두 번째 문제를 해결하는 것은 내가 수집 도우미 패키지를 사용하는 것이 좋습니다 것입니다, 아주 쉽게이기도합니다. 당신과 같이 쉽게이 작업을 수행 할 수 있습니다 :
// Add calculated fields to MyCollection. MyCollection.helpers({ item_count: function() { return this.items.length; } });
이 객체가 커서에 추가되기 전에 실행되며, MongoDB를 저장하지 동적으로 계산 반환 된 객체에 속성을 만들 것입니다.
from https://stackoverflow.com/questions/30807390/build-a-reactive-publication-with-additional-fields-in-each-document by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] created_at를 추가하고 필드 updated_at 스키마를 몽구스하기 (0) | 2019.12.04 |
---|---|
[MONGODB] MongoDB를 / 몽구스 findMany - 배열에 나열된 ID를 가진 모든 문서를 찾을 수 (0) | 2019.12.04 |
[MONGODB] MongoDB를 : 여러 기준에 배열에서 찾기 값 (0) | 2019.12.04 |
[MONGODB] MongoDB를이 - 중첩 된 배열에서 객체를 업데이트 (0) | 2019.12.04 |
[MONGODB] 별개의 기록 값을 가져옵니다 (0) | 2019.12.04 |