我想操纵find
,findOne
和所有查找结果将要返回的对象。
我曾与Laravel合作,有一个很好的解决方案,称为Eloquent Mutators。我想在猫鼬中实现相同的结果。
例如,我名为User
的架构在Mongoose架构中定义了一个firstname
,lastname
和一个email
属性。但是,当我执行查找(或任何其他与查找相关的查询)查询时,尽管我的Mongoose Schema有很大的不同,但我希望返回的结果对象像fullname
和email
属性一样模式。
我该如何实现?
按照下面的答案,我对模型进行了如下编辑:
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})
})
我做错什么了吗?
答案 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')