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

一意のフィールドを持つすべてのドキュメントの流星クエリ

    基盤となるドライバーコレクションオブジェクトにアクセスするために使用できる一般的な設定があります。したがって、 .aggregate() 他のプラグインをインストールせずに。

    基本的なプロセスは次のようになります:

    FooAges = new Meteor.Collection("fooAges");
    
    Meteor.publish("fooAgeQuery", function(args) {
        var sub = this;
    
        var db = MongoInternals.defaultRemoteCollectionDriver().mongo.db;
    
        var pipeline = [
            { "$group": {
                "_id": "$age", 
                "name": { "$max": "$name" }
            }}
        ];
    
        db.collection("foo").aggregate(        
            pipeline,
            // Need to wrap the callback so it gets called in a Fiber.
            Meteor.bindEnvironment(
                function(err, result) {
                    // Add each of the results to the subscription.
                    _.each(result, function(e) {
                        // Generate a random disposable id for aggregated documents
                        sub.added("fooAges", Random.id(), {
                            "age": e._id,
                            "name": e.name
                        });
                    });
                    sub.ready();
                },
                function(error) {
                    Meteor._debug( "Error doing aggregation: " + error);
                }
            )
        );
    
    });
    

    したがって、集計の出力用のコレクションを定義し、このようなルーチン内で、サブスクライブするサービスをクライアントに公開します。

    この内部で、集計が実行され、他のコレクションに入力されます(論理的には、実際には何も書き込まれません)。したがって、同じ定義を持つクライアントでそのコレクションを使用すると、すべての集計結果が返されます。

    私は実際、この質問 内に同様のプロセスの完全に機能するサンプルアプリケーションを持っています 、および meteorhacksgregate の使用法 この質問 のパッケージ さらに参照が必要な場合は、ここでも参照してください。




    1. MongoDBのデフォルトのデータベースパスは何ですか?

    2. MongoRepository@Query文字列を日付として解析できませんでした

    3. 配列フィールドがMongoDBの別の配列の一部であるかどうかを確認するにはどうすればよいですか?

    4. Hydra-CLIをパスワード保護redisサーバーに接続しますか?