sql >> Databasteknik >  >> NoSQL >> MongoDB

Har mongoose / mongodb tillgång till objektreferenser i schemat under aggregering?

det finns inget sätt att få åtkomst till objektreferensdata under den aggregerade processen, det arbete jag använde för mitt projekt var att lägga till en referens till ägaren i schemana i fråga.

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

Och sedan anställd för att samla direkt på underdokumentet för att få de unika användarna som äger instanserna av plats, på så sätt kan jag få ett ropresultat som matchar en fråga och en plats.

Exempel:

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

}

det här är precis så jag hittade för att möta mina specifika behov, jag hoppas att det kan hjälpa någon.




  1. uppdatera tvålagers kapslade objekt baserat på id

  2. PHP mongo hitta fältet börjar med

  3. Skärning mellan två eller flera sorterade uppsättningar

  4. Hitta nycklar med jokertecken