在Sails.js中,我如何在关联处查询具有条件的模型
在Sails.js(使用水线ORM)上,我如何查询一个仅在符合关联条件时才返回记录的模型。以下是代码:在Sails.js中,我如何在关联处查询具有条件的模型,sails.js,Sails.js,在Sails.js(使用水线ORM)上,我如何查询一个仅在符合关联条件时才返回记录的模型。以下是代码: Order.find() .populate('books', {title: {startsWith: 'Star Trek'}}) .exec(function (err, foundOrders) { .... }); 模型如下: 订单: module.exports = { attributes: { ... books: { collection
Order.find()
.populate('books', {title: {startsWith: 'Star Trek'}})
.exec(function (err, foundOrders) {
....
});
模型如下:
订单:
module.exports = {
attributes: {
...
books: {
collection: book,
via: order
through: orderbook
}
}
书籍:
订单:
module.exports = {
attributes: {
order: {
model: order
},
book: {
model: book
}
}
}
我发现结果记录集是所有订单。只是每个订单的填充结果只包含标题以“星际迷航”开头的书籍
那不是我想要的。我想退回只有书名以《星际迷航》开头的书的订单
请任何人都可以建议如何正确使用我的查询语句?当您选中:,您将发现:
找点什么
.填充(关联、次标准)
.exec(之后的函数(错误,填充的记录){
});
因此,您可以使用它,例如在文档中:
User.find({
name:'Finn'
}).populate('currentSwords', {
where: {
color: 'purple'
},
limit: 3,
sort: 'hipness DESC'
}).exec(function (err, usersNamedFinn){
又好又容易。祝你好运 在谷歌上搜索了几天后,我仍然找不到一个好的解决方案。但我用一种不太完美的方式解决了这个问题,但至少它是有效的
Book.find({title: {startsWith: 'Star Tek'}}).populate('orders')
.exec(function (err, foundBooks) {
if (err) return res.negotiate(err);
var orderIds = [];
for (var i=0; i<foundBooks.length; i++) {
for (var j=0; j<foundBooks[i].orders.length; j++) {
orderIds.push(foundBooks[i].orders[j].id;
}
}
Order.find({id: orderIds}).populate('books').populate( .. some other associations .. )
.exec(function (err, foundOrders) {
...
});
});
Book.find({title:{startsWith:'Star Tek'}})。填充('orders'))
.exec(函数(err,foundBooks){
if(err)返回res.negotiate(err);
var orderIds=[];
对于(var i=0;iNo,这不是我要问的问题。也许我问得不够清楚。以你的例子来说,你能得到的是,对于每个用户的记录,你都会得到一组颜色为紫色的CurrentSwarks。但是你也可以得到那些没有颜色为紫色的CurrentSwarks的用户。只有这些用户的CurrentSwarks属性是n空数组。我想得到的是将这些用户排除在结果集中。我现在无法尝试,但您是否尝试简单地将currentswivers
添加为user.find
?然后我建议将is作为一个问题放在Github上。Sails可以处理许多未记录的事情,有时GH问题是唯一的问题y想知道你是否会得到答案-请在这里发布解决方案(如果可能的话,请提及我让我知道)为了让其他人参考,为了进一步澄清我的问题,上面的代码将获得所有订单记录。那些没有书名以“星际迷航”开头的订单将有一个空的图书数组。我想得到的是,代码应该返回带有书名以“星际迷航”开头的图书数组的订单。带有空图书数组的订单sy应该被排除在外。我如何得到它?现在我需要在得到结果后应用数组过滤器。有更好的方法吗?
Book.find({title: {startsWith: 'Star Tek'}}).populate('orders')
.exec(function (err, foundBooks) {
if (err) return res.negotiate(err);
var orderIds = [];
for (var i=0; i<foundBooks.length; i++) {
for (var j=0; j<foundBooks[i].orders.length; j++) {
orderIds.push(foundBooks[i].orders[j].id;
}
}
Order.find({id: orderIds}).populate('books').populate( .. some other associations .. )
.exec(function (err, foundOrders) {
...
});
});