获取 .populate() 中的选定字段 waterline-postgresql .populate('fieldName',{select:[]})

get Selected fields in .populate() waterline-postgresql .populate('fieldName',{select:[]})

select 查询在 waterline-postgresql 的 .populate() 中不起作用。

Model.find(query).populate(assoc.alias,{select:['field1','field2']});

这在 waterline-postgresql 适配器中不起作用。

这是不支持还是我搞错了?

.populate() 不支持

select。你可以看到这个github issue。 In populate select 当前不工作。

This is feature request and it is open issue. hope in next release waterline team will introduce this feature.

由于没有正式的方法可以做到这一点,因此我做了一些更改以实现这一点。也许这不是最好的方法,但它确实有效。

User.find({ belongs_to: user.id })
.populate('person_id')
.exec(function findCB (err, usersFound)
{
    console.log(usersFound[0].toJSON())

    if (err)
    {
        return res.json(401, {error: err});
    }

    if (usersFound.length == 0)
    {
        return res.json(200, {message: 'No user asigned'});
    }
    else
    {
        // An array to store all the final user objects
        var asignedArray = [];

        for (index in usersFound)
        {
            var myObj = {},
                key,
                value;

            // Object in format {key: value}
            myObj['id'] = usersFound[index].id;
            myObj['fullname'] = usersFound[index].person_id.first_name + ' ' +
                                usersFound[index].person_id.second_name + ' ' +
                                usersFound[index].person_id.last_name;
            myObj['email'] = usersFound[index].email;
            myObj['job'] = usersFound[index].person_id.job;
            myObj['permission_level'] = usersFound[index].permission_level;

            // Adding the object to the main array
            asignedArray.push(myObj);
        }

        return res.json(200, {
            users: asignedArray
        });
    }
    });

希望对你有用。