猫鼬-处理查找结果

时间:2018-11-03 12:19:51

标签: node.js mongodb mongoose eloquent

我想操纵findfindOne和所有查找结果将要返回的对象。

我曾与Laravel合作,有一个很好的解决方案,称为Eloquent Mutators。我想在猫鼬中实现相同的结果。

例如,我名为User的架构在Mongoose架构中定义了一个firstnamelastname和一个email属性。但是,当我执行查找(或任何其他与查找相关的查询)查询时,尽管我的Mongoose Schema有很大的不同,但我希望返回的结果对象像fullnameemail属性一样模式。

我该如何实现?


按照下面的答案,我对模型进行了如下编辑:

const UserSchema = new Schema({
    firstname: String,
    lastname: String,
    email: String,
});

const User = mongoose.model('User', UserSchema);

User.aggregate([
    {
        $project: {
            email: 1,
            fullName: {
                $concat: ["$firstname", " - ", "$lastname"]
            }
        }
    },
], function (error, result) {
    console.log({ error, result })
})

console.log的最后一行中,输出了我正在寻找的理想输出。

但是find方法返回的结果与以前相同。

User.find().then(result => {
    console.log({result})
})

我做错什么了吗?

3 个答案:

答案 0 :(得分:1)

您可以通过以下操作来实现它:-
1)通过分配firstName和lastName中的值来$project fullName。
2)使用$addToSet并添加field fullName。 / p>

答案 1 :(得分:1)

type(x).__module__中使用$concat

$project

答案 2 :(得分:0)

最好的方法是将option参数与结果中想要的字段一起使用

来自文档的

Adventure.findOne({ type: 'iphone' }, 'name', function (err, adventure) {});

或者您可以使用选择链功能 Adventure.find({}).select('name age')