Ich mag eine Sammlung veröffentlichen, in denen Dokumente erzielt werden gemäß einer Kombination von ihren Feldern und dem vom Benutzer bestimmten Kontext; und das zurückgegebene Ergebnis wird basierend auf diesem Ergebnis sortiert und wahrscheinlich auf die besten Ergebnisse beschränkt.Meteor - veröffentlicht eine Sammlung auf personalisierte Punktzahl sortierte
This zeigt, wie zum Zeitpunkt der Veröffentlichung ein transform
Filter zu einer Sammlung hinzugefügt wird. Ich bin mir aber nicht sicher transform
ist ein effizienter Ansatz für die Berechnung eines Feldes, das ich in der Art verwenden möchte.
Schließlich wäre es toll, Mongo Map Reduce zu verwenden, um empfohlene Elemente auf der Grundlage der berechneten schnell zurückzukehren Partitur, die parallel gemacht werden kann.
@ brett-mclain pointed out wie einige Karten können reduzieren die Sortierung in reiner Mongo erfolgen. Es gibt ein paar Meteor Pakete out there zu Meteor Sammlungen zu erweitern, aber ich konnte nicht finden, wie sie in der Meteor Veröffentlichung zu verwenden (vs in einem Verfahren) Außerdem here die Karte Ausgabe reduzieren auf eine andere Sammlung senden, die scheinbar jedes Mal überschrieben wird, um die Methode wird aufgerufen.
ist hier etwa die Logik Ich mag würde erreichen:
/* Server */
Meteor.publish('getRecommendedItems', function() {
var u = Users.findOne(this.userId);
var scoreItem = function(item, u) { ... };
return Items.find(
{},
{
transformInParallel: function(doc) {
doc.score = scoreItem(doc);
},
sort: {score: -1},
limit: 10,
}
);
});
/* Client template*/
Template.templateName.onCreated(function() {
this.subscribe('getRecommendedItems');
this.items = Items.find({}, sort: {score: -1});
});
, wo ich außer score
im Client zugegriffen werden kann, ohne dass eine Berechnung zu tun.
Es scheint einfacher, benutzerdefinierte Dinge in Meteor.methods
zu tun, aber Meteor.publish
fühlt sich an wie der natürliche Ort, um dies zu tun; weil hier die magische Reaktivität von Meteor stattfindet.
Mögliche Duplikate von [Sortieren mongodb von reddit Ranking-Algorithmus] (http://StackOverflow.com/Questions/22728668/Sorting-Mongodb-by-reddit-ranking-algorithm) –
Ich habe dies als ein Duplikat gekennzeichnet und verknüpft zu einer Stackoverflow-Frage über die Implementierung von Reddits Time-Decay-Algorithmus durch Sortierung in MongoDB. Ihre Lösung ist eine Karte verwenden reduzieren: http://stackoverflow.com/questions/22728668/sorting-mongodb-by-reddit-ranking-algorithm –
Das ist ein sehr interessanter Beitrag. Ich frage mich, wie ich diese Mongo-Operationen innerhalb des Meteor-Rahmens durchführen kann. Mein Verständnis ist, dass Meteor eine Schicht hinzufügt, die Live-Updates für den Client bereitstellt, und anscheinend die Operation beschränkt, die man tun kann, um dieses Ergebnis zu erreichen. Aus einer Meteor-Sammlung gibt es Hinweise wie '.mapReduce' Lassen Sie mich wissen, wenn ich etwas vermisse, sonst werde ich bearbeiten und öffnen Sie die Frage – Guig