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

Má mongoose / mongodb přístup k odkazům na objekty ve schématu během agregace?

neexistuje žádný způsob, jak přistupovat k referenčním datům objektu během agregovaného procesu, práce, kterou jsem pro svůj projekt použil, bylo přidat odkaz na vlastníka do příslušných schémat.

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

A pak jsem použil agregaci přímo na vnořený dokument, abych získal jedinečné uživatele, kteří vlastní instance místa, tímto způsobem mohu získat výsledek pokřiku odpovídající dotazu a místu.

Příklad:

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

}

to je právě způsob, jak jsem zjistil, jak obejít své konkrétní potřeby, doufám, že to někomu pomůže.




  1. Jaké jsou skutečné případy použití pro použití databáze NoSQL Document Store?

  2. MongoParseError:možnosti useCreateIndex, useFindAndModify nejsou podporovány

  3. Proč Redis SortedSet používá Přeskočit seznam místo Balanced Tree?

  4. Mnoho až mnoho se aktualizuje v MongoDB bez transakcí