user3024839
user3024839

Reputation: 11

Create an object from multiple database collections (SailsJS, MongoDB, WaterlineJS)

I'm very new to Sails and noSQL databases and I'm having trouble gathering information together from different collections. Basically I need to gather an object of items from one collection and then use a foreign key stored in that collection to add data from a separate collection so the whole thing can be sent as one object.

Currently I find all the items in a collection called Artwork, then I'm using a for loop to iterate through the artworks. I need to use an id stored in Artworks to query a collection called Contacts but having successfully found the contact I am unable to pass it back out of the function to add it to the Artwork object.

    find: function ( req, res, next ) {
            Artwork.find().done( function ( err, artwork ) {
                // Error handling
                if (err) {
                    return console.log(err);
                } else {
                    for ( x in artwork ) {
                        var y = artwork[x]['artistID'];
                        // Get the artsists name
                        Contact.find(y).done( function( err, contact ) {
                            // Error handling
                            if ( err ) {
                                return console.log(err);
                            // The Artist was found successfully!
                            } else {
                                var artist = contact[0]['fullName'];
                            }
                        });
                        artwork[x]['artistsName'] = artist;
                    }
                    res.send(artwork);
                }
            });
}

The result of the above code is an error thrown that tells me 'artist' is undefined. The variable is not being passed outside the function?

Any advice greatly received.

Upvotes: 1

Views: 994

Answers (1)

JohnGalt
JohnGalt

Reputation: 2881

Sails is about to release an update that will include associations. In the meantime, here's an answer for how you can accomplish it using async. https://stackoverflow.com/a/20050821/1262998

Upvotes: 1

Related Questions