sql >> Databasteknik >  >> NoSQL >> MongoDB

Meteor.js - sätt att göra användarsökning över flera samlingar

OK, jag har utarbetat ett sätt att göra detta utan att göra om hela min databas. Bravo Meteor!

på servern :

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

och på klienten :

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

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

Nu innehåller SearchCollection de data jag vill ha från resultaten, där jag kan bestämma vilken data jag vill ha från varje samling separat.

En nackdel är att jag helt klart duplicerar data - vissa om inte alla dessa poster finns redan på klienten...




  1. Dynamiska frågor i MongoDB och Node.js

  2. Hur skapar man tailable-markör i MongoDB-skal?

  3. MongoDB 4.2.1 - updateMany:Fel:uppdateringshandlingsdokumentet måste innehålla atomoperatorer

  4. Uppdatera dokument i MongoDB