Search code examples
sails.jswaterlinesails-mongo

How to have an optional association using Waterline?


I'm using sails.js for a project and everything is going fine so far. Except that I don't know how to have an optional association between my two models. If I don't specify one, then if I use populate() it takes the first one available.

I have those two models:

// Book.js
module.exports = {

  attributes: {
    title: 'string',
    serie: { model: 'serie' }
  },

};

// Serie.js
module.exports = {

  attributes: {
    name: 'string',
    books: { collection: 'book', via: 'serie' }
  }

};

If I do this:

$ sails console
> Book.create({title: "Title"}).exec(function(err, book) {
    Book.findOne({id: book.id }).populateAll().exec(function(err, book) {
        console.log(book);
    });
});

I get this:

{
  serie: { name: 'Previously inserted serie' },
  title: 'Title',
  id: '55d6230122e3b1e70d877351'
}

Why isn't serie empty ? When inserting the book, I didn't specify any serie but it is still linked to a random one.


Solution

  • It was actually a bug from the sails-mongo adapter. I made a pull request that fixes it.