I've connected my SailsJs app to a Mongodb database. I'm working on an analytic application. These are the major models in my application:
User
Project
Report
Event
A user can have many projects, a project can have many reports and a report can have many events. I have created these relations using collection
and model
properties of my models attributes. My problem is why is it so hard to find events of specific user? I wish I could do this:
User.
find({id: id}).
populate('projects').
populate('reports').
populate('events').
then(function (eventsOfMyUser) {
});
but since only projects
is an attribute of my User
model only the first populate works. Shouldn't be an easier way to find a deep model rather than writing nasty and confusing async loops in my controller or model code?
At the moment sails doesn't have any kind of nested population. The issue to reference: https://github.com/balderdashy/waterline/issues/308
Worth saying there's a pull request to add nested population: https://github.com/balderdashy/waterline/pull/1052
Pull request isn't merged at the moment but you can use it installing one directly with
npm i Atlantis-Software/waterline#deepPopulate
With it you can do something like .populate('projects.reports ...)'
.
Right now there is a hook that allows you to do that. It is changing waterline with Offshore. Offshore is extended fork of Waterline with deep populate, cache mechanism.
In the road map right now there are:
- Associations Criteria (add default criteria to association)
- Transactions
来源:https://stackoverflow.com/questions/34172091/is-there-a-bettery-way-to-work-with-nestedassociated-models-in-sails-js