gpt4 book ai didi

node.js - Mongoose 查询 : remove "_id" attribute, 在结果中保留虚拟属性 "id"

转载 作者:IT老高 更新时间:2023-10-28 13:26:10 25 4
gpt4 key购买 nike

我正在运行一个 Express.js 应用程序,我有以下设置:

models.js

var schemaOptions = {
toJSON: {
virtuals: true
},
toObject: {
virtuals: true
}
};

var modelSchema = new mongoose.Schema({
name : { type: String, required: true }

}, schemaOptions);

modelSchema.virtual('id').get(function() { return this._id; });

controllers.js

exports.getModel = function(req, res) {
Model.find().select('name').exec(function(err,model) {
if (err) {
return res.status(500).json({errors:err, message: 'Internal server error'});
}
return res.status(200).json({model: model});
});
};

上述查询的结果是这样的:

{ "_id":"dakjdjkakda", "name":"MontyPython", "id":"dakjdjkakda" } 

因为我在 modelSchema 中定义了 Virtual 属性。

如果我将查询选择语句更改为:

Model.find().select('-_id name').exec(function(err,model) {}

结果是:

{"name":"MontyPython", "id":null }

我相信这是因为 Virtual 属性指向 _id 属性。

我的问题是,如何去掉查询中的_id属性,但保留我创建的id别名?

最佳答案

如果您使用的是 Mongoose ,

您可以在何时处理 toJSON,您可以决定它的显示方式,但您不能在查询中提及它。


Model.find().select('name').exec(function(err,model) {}

 new mongoose.Schema(yourSchema, {
toJSON: {
transform: function(doc, ret) {
ret.id = ret._id;
delete ret._id;
}
}
);}

关于node.js - Mongoose 查询 : remove "_id" attribute, 在结果中保留虚拟属性 "id",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28566841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com