sql >> Databáze >  >> NoSQL >> MongoDB

Meteor.js – způsoby, jak provádět uživatelské vyhledávání ve více kolekcích

OK, vymyslel jsem způsob, jak to udělat, aniž bych znovu dělal celou databázi. Bravo Meteor!

na serveru :

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();
    }
});

a na klientovi :

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

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

SearchCollection nyní obsahuje data, která chci z výsledků, kde se mohu rozhodnout, jaká data chci z každé kolekce zvlášť.

Jednou nevýhodou je, že zřetelně duplikuji data – některé, ne-li všechny tyto záznamy již v klientovi existují...




  1. vlastní pole _id Django MongoDB MongoEngine

  2. java - představení MongoDB + Solr

  3. Nesprávný počet z agregačního dotazu

  4. Získejte hodnotu Set z Redis pomocí RedisTemplate