我有一个填充了用户的模型。所以我想找到其中一个用户 = someString 的位置。
所以使用 Waterline 我可以做到这一点
Partie.find().populate('users').where({category:{'contains':'sport'}}).exec(function(e,r){
console.log(r);
res.json(200,r);
});
但是如何在“用户”上创建包含?这是一个数组。
"users": [
{
"username": "firstUser",
"createdAt": "2015-07-30T15:33:57.662Z",
"updatedAt": "2015-07-30T15:33:57.662Z",
"id": "55ba43e58cce9ee80865271b"
},
{
"username": "someUsername",
"createdAt": "2015-08-04T12:14:50.291Z",
"updatedAt": "2015-08-04T12:14:50.291Z",
"id": "55c0acba2d1502ed2faf2b3b"
}
],...
不确定这是否可能。随时提出替代方案
最佳答案
您可以将第二个参数传递给包含查询条件的填充,例如:
Partie.find().populate('users', {where: {username: "someUsername"}})...
根据我的经验(使用最新的水线),上面的示例仅将与给定用户名匹配的用户填充到 Partie 对象中。
但是,在我的机器上,它不限制从搜索查询返回的“派对”(也许这与我的 waterline/postgres 适配器版本有关)。我通过在返回后过滤完整数组(使用 lodash)解决了这个问题:
res.json(_.filter(parties, function(party){
// Pluck all usernames and check if 'someUserName' is attending this party
return _.contains(_.pluck(party.users, 'username'), 'someUserName');
}));
请注意,对于大型数据集,不建议使用像上面示例这样的过滤器!
关于javascript - 水线包含关联属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31813154/