sql >> データベース >  >> NoSQL >> MongoDB

Meteor.js-複数のコレクションに対してユーザー検索を行う方法

    OK、データベース全体をやり直さずにこれを行う方法を考え出しました。ブラボーメテオ!

    サーバー上:

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

    およびクライアント上:

    Deps.autorun(function(){
        Meteor.subscribe('search_results', Session.get('currentQuery'));
    });
    
    SearchCollection = new Meteor.Collection('search_collection');
    

    これで、SearchCollectionには結果から必要なデータが含まれ、各コレクションから必要なデータを個別に決定できます。

    欠点の1つは、データを明確に複製していることです。これらのレコードのすべてではないにしても、一部はすでにクライアントに存在しています...




    1. 環境変数を使用してredis.confに動的パスを設定する

    2. SpringBatchでMongoItemReaderでAggregationQueryを使用する方法

    3. Dockerコンテナ内のMongodb接続エラー

    4. Redis zrevrangebyscore、辞書式順序以外の並べ替え