Использование заполнить, чтобы получить справочный документ, но он возвращает полный документ в массиве 1 - PullRequest
0 голосов
/ 03 июня 2018

Всякий раз, когда я звоню клиенту, он отображает полный JSON клиентского документа в клиенте [0].Я хочу иметь возможность вызывать work.client.name и work.client.url и тому подобное.К сожалению, если это дубликат вопрос, я искал долго и упорно и не нашел ответа.

1002 * Контроллер работа
exports.work_detail = function(req, res, next) {

    async.parallel({
        work: function(callback) {
            Work.findById(req.params.id)
                .populate('client')
                .exec(callback);
        }
    }, function(err, results) {
        if (err) { return next(err); }
        if (results.work==null) { // No results.
            var err = new Error('Work not found');
            err.status = 404;
            return next(err);
        }
        // Successful, so render.
        console.log(results.work.client.name);
        res.render('work/work_detail', { title: 'Work Details', work:  results.work } );
    });

};

Работа модель

var workSchema = new Schema({
    client: [{ type: Schema.Types.ObjectId, ref: 'Client', required: true }],
    time: {
        type: Number,
    },
    work_done: {
        type: Array,
    },
    work_value: {
        type: [{}],
    },
    total: {
        type: Number,
        // set: calculateValue
    },
    work_address: {
        type: String,
    },
    note: {
        type: String,
    }
    }, {
    timestamps: true
});

Theмодель клиента

var clientSchema = new Schema({
    first_name: {
        type: String,
        required: true,
        set: firstToUpper
    },
    last_name: {
        type: String,
        required: true,
        set: firstToUpper
    },
    address: {
        type: String,
        required: false,
    },
    phone: {
        type: Number,
        required: false,
    },
    email: {
        type: String,
        required: false,
        lowercase: true
    },
    note: {
        type: String,
        required: false,
    }}, {
    timestamps: true,
    toObject: { virtuals: true },
    toJSON: { virtuals: true },
});

// Capitalize first letter of each word when called
function firstToUpper (string) {
    return string.charAt(0).toUpperCase() + string.slice(1);
}

// Virtual for client's full name
clientSchema
.virtual('name')
.get(function () {
    return this.first_name + ' ' + this.last_name;
});
// Virtual for clients's URL
clientSchema
.virtual('url')
.get(function () {
    return '/invoice/client/' + this._id
});

1 Ответ

0 голосов
/ 03 июня 2018

Схема была завернута в массив при аварии, на что указывает Нил Ланн

...