如何在Sails.js / Waterline中执行多对多的Where子句?

我有这个代码

Image.find({ tags: {id: 3}}).exec(console.log); 

这是错误的,但我的意图是find所有的图像tag id 3

一个图像可以有很多标签,许多图像可以用相同的标签(多对多)来标记。

型号代码。

图片

 module.exports = { attributes: { tags: { collection: 'Tag', via: 'images' } } }; 

标签

 module.exports = { attributes: { images: { collection: 'Image', via: 'tags' } } }; 

我不想使用SQL原始查询,也不想使用N+1查询来填充所有内容。

我也尝试使用.populate()通过使用Image.find(3).populate("images")...但它只会填充图像,但每个图像不会有标签,所以这是行不通的我。

你可以使用下面的代码。

下面的代码可能仍然在内部执行N + 1个查询。
最好的方法来检查将启用数据库中的查询日志。

注:我没有检查代码的语法错误。

 function findImagesByTagId(tagId, callback) { Tag.findOne(tagId) .populate("images") .exec(function(err, tag) { if (err) { return callback(err); } if (!tag) { return callback(new Error('tag not found: ' + tagId)); } // Collect all image ids var imageIds = _.map(tag.images, 'id'); Image.find(imageIds) .populate('tags') .exec(callback); }); }