sql >> Database teknologi >  >> NoSQL >> MongoDB

Har mongoose / mongodb adgang til objektreferencer i skema under aggregering?

der er ingen måde at få adgang til objekt Refererede data under den aggregerede proces, arbejdet omkring jeg brugte til mit projekt var at tilføje en reference til ejeren i de pågældende skemaer.

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

Og derefter ansat til at samle direkte på underdokumentet for at få de unikke brugere, der ejer forekomsterne af sted, på denne måde kan jeg opnå et råberesultat, der matcher en forespørgsel og et sted.

Eksempel:

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

}

dette er bare den måde, jeg fandt ud af at omgå mine særlige behov, jeg håber, det kan hjælpe nogen.




  1. Docker undlader at starte skinner

  2. mongodb aggregeringsrammematch af indlejrede dokumenter

  3. Importerer json fra fil til mongodb ved hjælp af mongoimport

  4. heroku mongohq og mongoid Mongo::ConnectionFailure