从sails控制器

时间:2016-09-14 07:08:05

标签: sails.js waterline

我希望在某些控制器方法中排除某些数据,在其他方法中我想要那些数据。在找到:

后,我使用forEach函数直接进入方法
nine: function (req, res) {
    Dore.find()
        .limit(9)
        .sort('createdAt DESC')
        .populate('file')
        .exec(function (err, sh) {
            if (err) {
                return res.negotiate(err);
            } else {
                console.log('before : ', sh);
                sh.forEach(function (item, i) {
                    delete item.zaman;
                });
                console.log('after : ', sh);
                return res.send(sh);
            }
        });
},

我想知道如何通过查找来做到这一点,并且不会包含在查找中,所以我们不需要再次使用forEach删除它。 罐

由于@zabware在select中说我们有Query option方法,我尝试这种格式但不起作用并返回所有数据:

我尝试使用以下格式但不起作用:

Model.find( {
            where: {},
            limit: 9,
            sort: 'createdAt DESC'
        },
        {
            select: [ 'id', 'createdAt' ]
        } )

Model.find( {
            where: {},
            limit: 9,
            sort: 'createdAt DESC',
                        select: [ 'id', 'createdAt' ]
        } )

Model.find( {}, select: [ 'id', 'createdAt' ] )

2 个答案:

答案 0 :(得分:1)

尽管toJson确实是为解决您遇到的问题而设计的,但它对您没有帮助,因为在某些操作中您想要排除某些字段,而在其他操作中则不能。

因此我们需要为每个查询选择字段。幸运的是,在水线上有一个解决方案:

Dore.find({}, {select: ['foo', 'bar']})
    .limit(9)
    .sort('createdAt DESC')
    .populate('file')
    .exec(function (err, sh) {
        console.log(err);
        console.log(sh);
    });

这支持自0.11帆以来,但没有真正记录。您可以在https://github.com/balderdashy/waterline-docs/blob/e7b9ecf2510646b7de69663f709175a186da10d5/queries/query-language.md#query-options

的查询选项下找到它

答案 1 :(得分:0)

在使用调试器时,我偶然发现了它-Sails版本1.2.3

有类似omit之类的东西,您可以将其放入您的find方法调用中:

const user = await User.findOne({
   where: {email : inputs.email},
   omit: ['password']
}); //There won't be password field in the user object

很遗憾,文档中对此一无所知。