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

前端之家收集整理的这篇文章主要介绍了node.js – Mongoose查询:删除“_id”属性,在结果中保留虚拟属性“id”前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在运行Express.js应用程序,我有以下设置:

models.js

  1. var schemaOptions = {
  2. toJSON: {
  3. virtuals: true
  4. },toObject: {
  5. virtuals: true
  6. }
  7. };
  8.  
  9. var modelSchema = new mongoose.Schema({
  10. name : { type: String,required: true }
  11.  
  12. },schemaOptions);
  13.  
  14. modelSchema.virtual('id').get(function() { return this._id; });

controllers.js

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

上述查询的结果如下:

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

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

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

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

结果将是:

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

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

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

解决方法

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

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

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

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