В своей публикации вместо возврата курсора вы можете использовать API публикации более низкого уровня, чтобы иметь более точный контроль над результатами.
Например, когда вы возвращаете курсор из публикации, Meteor вызывает функцию _publishCursor, которая выглядит так:
Mongo.Collection._publishCursor = function (cursor, sub, collection) {
var observeHandle = cursor.observeChanges({
added: function (id, fields) {
sub.added(collection, id, fields);
},
changed: function (id, fields) {
sub.changed(collection, id, fields);
},
removed: function (id) {
sub.removed(collection, id);
}
});
// We don't call sub.ready() here: it gets called in livedata_server, after
// possibly calling _publishCursor on multiple returned cursors.
// register stop callback (expects lambda w/ no args).
sub.onStop(function () {observeHandle.stop();});
// return the observeHandle in case it needs to be stopped early
return observeHandle;
};
Таким образом, вы можете изменить свою публикацию, чтобы в основном делать то же самое, но также опубликовать текстовое поле, которое получает свое значение из поля описания, например:
Учитывая следующую коллекцию:
MyCollection = new Mongo.Collection("my_collection");
Ваша функция публикации может выглядеть так:
Meteor.publish("myPub", function () {
var sub = this;
var observeHandle = myCollection.find().observeChanges({
added: function (id, fields) {
fields.text = fields.description; // assign text value here
sub.added("my_collection", id, fields);
},
changed: function (id, fields) {
fields.text = fields.description; // assign text value here
sub.changed("my_collection", id, fields);
},
removed: function (id) {
sub.removed("my_collection", id);
}
});
sub.ready()
// register stop callback (expects lambda w/ no args).
sub.onStop(function () {observeHandle.stop();});
};
person
bluebird
schedule
27.01.2016