Това е стар въпрос, но се надявам, че отговорът ми може да помогне на други, които се нуждаят от тази информация, както и аз.
Понякога имам нужда от различни, но реактивни данни, за да покажа индикатори в потребителския интерфейс, а броят на документите е добър пример.
- Създайте повторно използваема (експортирана) колекция само от страна на клиента, която няма да бъде импортирана на сървъра (за да избегнете създаването на ненужна колекция от база данни). Обърнете внимание на името, предадено като аргумент (тук "разни").
import { Mongo } from "meteor/mongo";
const Misc = new Mongo.Collection("misc");
export default Misc;
- Създайте публикация на сървъра, която приема
docId
и името на key
, където ще бъде записан брояч (със стойност по подразбиране). Името на колекцията, в която да се публикува, е това, което се използва за създаване на клиентска колекция („Разни“). Стойността docId
няма голямо значение, тя просто трябва да бъде уникална сред всички различни документи, за да се избегнат конфликти. Вижте Документи на Meteor за подробности относно поведението на публикуване.
import { Meteor } from "meteor/meteor";
import { check } from "meteor/check";
import { Shifts } from "../../collections";
const COLL_NAME = "misc";
/* Publish the number of shifts that need revision in a 'misc' collection
* to a document specified as `docId` and optionally to a specified `key`. */
Meteor.publish("shiftsToReviseCount", function({ docId, key = "count" }) {
check(docId, String);
check(key, String);
let initialized = false;
let count = 0;
const observer = Shifts.find(
{ needsRevision: true },
{ fields: { _id: 1 } }
).observeChanges({
added: () => {
count += 1;
if (initialized) {
this.changed(COLL_NAME, docId, { [key]: count });
}
},
removed: () => {
count -= 1;
this.changed(COLL_NAME, docId, { [key]: count });
},
});
if (!initialized) {
this.added(COLL_NAME, docId, { [key]: count });
initialized = true;
}
this.ready();
this.onStop(() => {
observer.stop();
});
});
- В клиента импортирайте колекцията, изберете
docId
низ (може да бъде записан в константа), абонирайте се за публикацията и изтеглете съответния документ. Ето!
import { Meteor } from "meteor/meteor";
import { withTracker } from "meteor/react-meteor-data";
import Misc from "/collections/client/Misc";
const REVISION_COUNT_ID = "REVISION_COUNT_ID";
export default withTracker(() => {
Meteor.subscribe("shiftsToReviseCount", {
docId: REVISION_COUNT_ID,
}).ready();
const { count } = Misc.findOne(REVISION_COUNT_ID) || {};
return { count };
});
person
DSav
schedule
24.09.2019
Tasks
принадлежат ли на потребители или нещо подобно? Защо питам е, че можете сами да поддържате този брой в колекциятаusers
и да го вземете от там - person ajduke   schedule 14.01.2015