水线:如果属性是集合,如何执行IN查询?

时间:2016-07-14 18:11:19

标签: mongodb sails.js waterline

在水线的docs中,声明这是在模型上执行IN查询的方法:

Serial.println("In Monitor")

这是在模型上执行OR查询的方法:

Model.find({
  name : ['Walter', 'Skyler']
});

我现在的问题是我需要这两者的组合,并且为了使它更复杂,我必须使用的一个属性是集合。

所以我尝试的是这个,但它似乎不起作用:

Model.find({
  or : [
    { name: 'walter' },
    { occupation: 'teacher' }
  ]
})

注意:userIds是来自用户模型的id的数组。

(简化)产品模型看起来像这样:

Product.find({
  or : [
    { createdBy: userIds },
    { likes: userIds }
  ]
})

当我只包含createdBy时查询有效,所以它似乎是collection属性的问题。 这有点可能吗? 感谢您的投入。

更新

我认为这只适用于native()查询。 我理解它的方式应该有效。

module.exports = {
    attributes: {
        name: 'string',
        description: 'string',
        createdBy: {
            model: 'User'
        },
        brand:  {
            model: 'Brand',
        },
        likes: {
            collection: 'User',
        }
    }
}

不幸的是,事实并非如此。返回的Product.native(function(err, products){ if(err) return res.serverError(err); products.find({"likes": { $elemMatch: { _id: { $in: userIds}}}}).toArray(function(err, results){ if (err){ console.log('ERROR', err); } else { console.log("found products: " + results.length); console.log(results); return res.ok(results); } }); }); 始终是一个空数组。

0 个答案:

没有答案