2015-04-06 71 views
1

我正在尝试使用Sequelize形成一个查询来加入并选择+限制。让我来说明问题:续集加入并限制

我有一个多对多的关系:Book - Reader。读者可以有很多书,一本书可以有很多读者。

鉴于Book的ID,我想翻阅其所有Reader s。 这是我目前尝试过的,它有一些问题。首先,分页不起作用。其次它仍然选择Book以及Reader的所有属性,当我只需要Reader(我扔掉了所有的Book)。

/** 
* Get all Readers of a Book. 
* 
* @param {Number} bookId id of the book 
* @param {Number} limit number of readers to retrieve 
* @param {Number} offset number of readers to skip 
* @return {Promise} contains an array of readers 
*/ 
function getBookReaders(bookId, limit, offset) { 
    return Book.findOne({ 
    id: bookId, 
    include: [Reader], 
    limit: 10, 
    offset: 30 
    }).then(function(book) { 
    return book.readers; 
    }); 
} 

关于如何正确构建此查询的任何建议?

回答

0

我不知道这是否实际工作,但它将使感觉发挥到极致应用到模型,你要限制:

Book.findOne({ 
    id: bookId, 
    include: [ { model: Reader, limit: 10, offset: 30 } ] 
}).then(function(book) { 
    return book.readers; 
}); 
+0

仍然抵消了极限/没有工作,这个API文档](http://docs.sequelizejs.com/en/latest/api/model/#findalloptions-queryoptions-promisearrayinstance)不要列出嵌套包含模型的限制/偏移选项 –

+0

是的。似乎有一个功能要求,但现在似乎没有任何方式不这样做,没有两次查询。但既然你知道引用,你可以使两个查询与Promise.all()并行运行。 –

+0

对不起,没有按照,我怎么会并行?这是一个多对多的模型,所以我需要连接表来获取所有'Reader'的ID /我无法直接查询'Reader'表。 –