Просто поля, которые были указаны для возврата.
ел бы знать, как установить проекцию для сопоставленного массива объектов из запроса Mongoose.
Например, если у меня есть модель Mongoose, которая выглядит примерно так:
var User = new Schema({
name: String,
children: [Child]
});
var Child = new Schema({
name: String,
height: Number,
age: Number,
secret: Number
});
Другими словами, пример объекта JSON, который может быть получен из этой модели:
User: {
name: 'abc',
children: [
{
name: 'def',
height: 123,
age: 7,
secret: 2
},
{
name: 'ghi',
height: 456,
age: 9,
secret: 3
}
]
}
Как видите, модель содержит свойствоchildren
это массивChild
объекты.
Если я совпаду толькоUser
которые содержат элемент вchildren
что имеет свойствоname: 'def'
:
Users.find({
children.name: 'def'
})
Затем я могу установить проекцию, чтобы выбрать свойства (такие какname
), а также свойства сопоставленного объекта с использованием позиционного оператора ($
):
.select({
name: 1,
children.$: 1
}
Проблема в том, что с этой проекциейchildren.$
всегда вернет весьChild
объект, включая свойства, которые я, возможно, не хочу запрашивать, такие какsecret
.
{
name: 'abc',
children: [
{
name: 'def',
height: 123,
age: 7,
secret: 2
}
]
}
В идеале я хотел бы иметь возможность выбрать определенные свойства изchild
объект, полученный через$
похоже на то, какname
был выбран из родительского объектаUser
, но я не могу найти способ сделать это.
Один из способов выбрать одно свойство - использовать форматchildren.$.age
но это можно использовать только для выбора 1 свойства, так как многократное выполнение этого действия приводит к ошибке, поскольку вы не можете использовать$
оператор несколько раз.
.select({
name: 1,
// and now select the height and age
// but only of the child that matches name = 'def'
// WITHOUT returning the entire object (exclude name and secret)
children.$.age,
children.$.height // error
})
Возможен ли выбор проекции для объекта, полученного позиционным оператором в Mongoose?