Как выбрать извергов, включая новое поле, значение которого является суммой других определенных полей с мангустом

Я работаю с mongoose, и я хотел бы выбрать поля, включая новое поле, значение которого является суммой других конкретных полей. Например, есть схема модели, как показано ниже.

const monsterSchema = new Schema({
 name: { type: String },
 power: { type: Number },
 armor: { type: Number },
});

Я хочу выбрать эти записи, имеющие поля "имя", "сила", "броня", "всего". Поле имеет значение в виде суммы "сила" и "броня".

Как я могу это сделать?

2 ответа

Решение

Используйте структуру агрегации, где вы можете запустить операцию агрегирования с $project шаг конвейера с дополнительным вычисляемым полем следующим образом (при условии, что ваша модель Mongoose называется Monster):

Monster.aggregate([
    { 
        "$project": {
            "name": 1,
            "power": 1,
            "armor": 1,
            "new_field": { "$add": [ "$power", "$armor" ] }     
        }
    }
]).exec(function(err, result){
    if(err) handleError(err);
    console.log(JSON.stringify(result, null, 4));
})

Вы можете добавить виртуальное поле в вашу схему.

var personSchema = new Schema({
    name: {
      first: String,
      last: String
    }
});

personSchema.virtual('name.full').get(function () {
   return this.name.first + ' ' + this.name.last;
});

var Person = mongoose.model('Person', personSchema);

Это не будет храниться в документе. Может помочь вам. Если вы хотите узнать больше об этом, обратитесь по ссылке ниже.

мангуст док

Другие вопросы по тегам