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

mongoose / mongodbは、集約中にスキーマ内のオブジェクト参照にアクセスできますか?

    集約プロセス中にオブジェクト参照データにアクセスする方法はありません。プロジェクトで採用した回避策は、問題のスキーマに所有者への参照を追加することでした。

    User = new Schema({
        places:[{type: Schema.Types.ObjectId, ref:'Place'}],
        shouts:[{type: Schema.Types.ObjectId, ref:'Shout'}]
    });
    Place = new Schema({
        owner:{type: Schema.Types.ObjectId, ref:'Place'},
        name:String,
        description:String,
    });
    Shout = new Schema({
        owner:{type: Schema.Types.ObjectId, ref:'Place'},
        content:String,
    });
    

    次に、サブドキュメントを直接集計して、場所のインスタンスを所有する一意のユーザーを取得します。これにより、クエリと場所に一致するシャウト結果を取得できます。

    例:

    module.exports.askForShoutInPlace = function(req, res){
    var pname = new RegExp(req.params.pname, 'i'); 
    var stringQ = new RegExp(req.paramos.qcontent, 'i');
    Place.aggregate(
        [
           //find Places that match criteria
           {'$match':{'name':pname}},
           //select owner id object to result
           {'$project':{ owner:'$owner'}},
           //group those results to single array with unique ids of users
           {'$group':{_id:'$owner'}}
        ]).exec(function(err, results){
        //find user shouts that match string and belong to owners know to be owners of a place
        Shout.find({'content':stringQ}).where({'owner':{'$in':results}}).exec(function(err, shouts){
           res.send(shouts);
        });
    });
    
    }
    

    これは、私の特定のニーズを回避するために私が見つけた方法です。誰かに役立つことを願っています。




    1. SQLのようなRedisデータベーステーブルを設計しますか?

    2. MongoDBRAMの使用を制限する

    3. コレクション内のMongoDB検索

    4. MongoDb-配列をクエリする