node.js – Mongoose查询:删除“_id”属性,在结果中保留虚拟属性“id”

前端之家收集整理的这篇文章主要介绍了node.js – Mongoose查询:删除“_id”属性,在结果中保留虚拟属性“id”前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在运行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属性.

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

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

结果将是:

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

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

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

解决方法

你不能这样做. MongoDB要求_id属性按照 documentation存在.

您可以选择在示例中使用虚拟属性,也可以使用$project来隐藏查询结果中的字段.

否则,您的mongo驱动程序(如Mongoose)应该能够隐藏或重命名所需的字段或属性.

猜你在找的Node.js相关文章