MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Meteor.js – Möglichkeiten zur Benutzersuche über mehrere Sammlungen

OK, ich habe einen Weg gefunden, dies zu tun, ohne meine gesamte Datenbank neu zu erstellen. Bravo Meteor!

auf dem Server :

Meteor.publish('search_results', function(query){
    if(query){
        var self = this;
        var actors = Actors.find({ $or : [{ name : query}, { actor_biography : query }] ),
        films = Films.find({ $or : [{ name : query}, { actor_biography : query }] ),
        cinemas = Cinemas.find({ $or : [{ name : query}, { actor_biography : query }] );
        actors.forEach(function(doc){
            self.added('search_collection', doc._id, { name : doc.name, type : 'actor' });
        });
        films.forEach(function(doc){
            self.added('search_collection', doc._id, { name : doc.name, type : 'film' });
        });
        cinemas.forEach(function(doc){
            self.added('search_collection', doc._id, { name : doc.name, type : 'cinema' });         
        this.ready();
    } else {
        this.ready();
    }
});

und auf dem Client:

Deps.autorun(function(){
    Meteor.subscribe('search_results', Session.get('currentQuery'));
});

SearchCollection = new Meteor.Collection('search_collection');

Jetzt enthält SearchCollection die Daten, die ich aus den Ergebnissen haben möchte, wobei ich entscheiden kann, welche Daten ich aus jeder Sammlung separat haben möchte.

Ein Nachteil ist, dass ich eindeutig Daten dupliziere - einige, wenn nicht alle dieser Datensätze existieren bereits auf dem Client...