水线包含一个关联属性

Waterline contains on association attributes?

本文关键字:关联 属性 包含一      更新时间:2023-09-26

我有一个填充了用户的模型。我想做一个查找其中一个用户= someString。

使用水线工具我可以这样做

        Partie.find().populate('users').where({category:{'contains':'sport'}}).exec(function(e,r){
        console.log(r);
        res.json(200,r);
    });

但是我如何使'users'上的包含?这是一个数组

"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"}})...

根据我的经验(使用最新水线),上面的示例只将匹配给定用户名的用户填充到party对象中。

然而,在我的机器上,它不限制从搜索查询返回的"party"(也许这与我的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');
 }));

请注意,对于大型数据集,不建议使用上面示例中的过滤器!