如何仅为响应添加mongoose对象的临时属性,而不存储在数据库中

bob*_*off 19 javascript mongoose node.js

我想用额外的数据填充一些额外的临时属性并发送回响应

'use strict';

var mongoose = require('mongoose');
var express = require('express');
var app = express();

var TournamentSchema = new mongoose.Schema({
    createdAt: { type: Date, default: Date.now },
    deadlineAt: { type: Date }
});

var Tournament = mongoose.model('Tournament', TournamentSchema);

app.get('/', function(req, res) {
    var tournament = new Tournament();

    // Adding properties like this 'on-the-fly' doesnt seem to work
    // How can I do this ?
    tournament['friends'] = ['Friend1, Friend2'];
    tournament.state = 'NOOB';
    tournament.score = 5;
    console.log(tournament);
    res.send(tournament);
});

var server = app.listen(3000, function() {
    console.log('Listening on port %d', server.address().port);
});
Run Code Online (Sandbox Code Playgroud)

但是这些属性不会添加到Tournament对象上,因此不会在响应中添加.

bob*_*off 32

在这里找到答案:无法向js对象添加属性

我无法在Mongoose对象上添加属性,我必须使用.toJSON().toObject()方法将其转换为普通的JSON对象.

编辑:和@Zlatko提到的一样,您也可以使用.lean()方法完成查询.

mongooseModel.find().lean().exec()
Run Code Online (Sandbox Code Playgroud)

...也生成本机js对象.

  • FWIW你也可以mongooseModel.find().lean().exec()...它也产生原生的js对象. (8认同)