这是一个旧问题,但我希望我的答案可以帮助需要此信息的其他人,就像我一样。
有时我需要一些杂项但是反应灵敏的数据来显示UI中的指标,文档计数是一个很好的例子。
- 创建一个可重复使用(导出的)仅在客户端上使用的集合,不会在服务器上导入(以避免创建不必要的数据库集合)。请注意传递的名称作为参数(这里是“misc”)。
import { Mongo } from "meteor/mongo";
const Misc = new Mongo.Collection("misc");
export default Misc;
2. 在服务器上创建一个发布程序,接受
docId
和将保存计数的
key
名称(具有默认值)。要发布到的集合名称是仅用于创建客户端集合的那个集合(“misc”)。
docId
的值并不重要,它只需要在所有Misc文档中是唯一的,以避免冲突。有关发布行为的详细信息,请参见
Meteor文档。
import { Meteor } from "meteor/meteor";
import { check } from "meteor/check";
import { Shifts } from "../../collections";
const COLL_NAME = "misc";
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 };
});
Tasks
属于用户还是其他什么?我之所以问是因为您可以在users
集合中维护该计数,并从那里获取它。 - ajduke