在Sails.js中,我如何在关联处查询具有条件的模型

在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

在Sails.js(使用水线ORM)上,我如何查询一个仅在符合关联条件时才返回记录的模型。以下是代码:

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) {
    ...
  });
});