我的JSON响应包含字段first_name但我希望我的Mongoose模型将此字段表示为firstName。这是可能的,如果是,那么如何?
答案 0 :(得分:0)
您可以使用Mongoose返回的一个新对象创建具有不同属性名称的新对象。这样做的一个好方法是创建一个使用对象解构的函数。例如,让我们说这是您的架构:
"failOnUnprocessableDocument" : false,"failOnUnsupportedContentType" : false
然后,您可以使用此函数创建具有所需属性名称的新对象:
{
firstName: { type: String, required: true },
lastName: { type: String, required: true }
}
然后,当您查询数据库时,将此函数应用于响应:
const filterDocument = ({ firstName, lastName }) => ({
first_name: firstName,
last_name: lastName
})
答案 1 :(得分:0)
Doug W有一个很好的解决方案,但是如果您不想使用Promises并链接.then
,则可以简单地向模式添加选项,如下所示:
const mongoose = require ('mongoose'); // I am using v5.9.1 at the moment
const { Schema } = mongoose.Schema;
// Specify an options object
const options = {
toJSON: {
versionKey: false
}
// If you ever send the query result as an object,
// you may remove it from there, too, if you wish
// toObject: {
// versionKey: false
// }
};
// Attach the options object to the schema by
// passing it into Schema as the second argument
const mySchema = new Schema({
/** define your schema */
}, options);
这仍然会将__v保存到数据库中的文档中。但是当它是猫鼬查询的结果时,它不会出现在json / object上。
除了在选项中设置versionKey: false
之外,您还可以指定转换函数:
/* ... */
// Specify an options object
const options = {
toJSON: {
// versionKey: false,
transform: function(doc, ret) {
// ret is the object that will be returned as the result
// (and then stringified before being sent)
delete ret.__v;
return ret;
}
}
};
/* ... */
我知道这个问题将近两年了,但是我需要一个答案,而Google当时对我并不友善。我想通了,现在我希望其他人会在这里寻找答案,并发现他们可以选择。双关不是本来打算的。