Seleccione el elemento de matriz coincidente y devuelva los campos seleccionados

Me gustaría saber cómo configurar la proyección para una matriz coincidente de objetos de una consulta Mongoose.

Por ejemplo, si tengo un modelo Mongoose que se parece a esto:

var User = new Schema({
  name: String,
  children: [Child]
});

var Child = new Schema({
  name: String,
  height: Number,
  age: Number,
  secret: Number
});

En otras palabras, un objeto JSON de ejemplo que podría resultar de este modelo:

User: {
  name: 'abc',
  children: [
    {
      name: 'def',
      height: 123,
      age: 7,
      secret: 2
    },
    {
      name: 'ghi',
      height: 456,
      age: 9,
      secret: 3
    }
  ]
}

Como puede ver, el modelo contiene una propiedadchildren esa es una serie deChild objetos.

Si solo coincidoUser que contienen un elemento enchildren que tiene propiedadname: 'def':

Users.find({
  children.name: 'def'
})

Luego puedo configurar la proyección para seleccionar propiedades (comoname) y también propiedades del objeto coincidente utilizando un operador posicional ($):

.select({
  name: 1,
  children.$: 1
}

El problema ahora es que con esta proyección,children.$ siempre devolverá la totalidadChild objeto, incluidas las propiedades que no quiero consultar, comosecret.

{
  name: 'abc',
  children: [
    {
      name: 'def',
      height: 123,
      age: 7,
      secret: 2
    }
  ]
}

Idealmente, me gustaría poder seleccionar también ciertas propiedades delchild objeto obtenido a través de$ similar a cómoname fue seleccionado del objeto padreUser, pero no puedo encontrar una manera de hacer esto.

Una forma de seleccionar una sola propiedad es usar el formatochildren.$.age pero esto solo se puede usar para seleccionar 1 propiedad, ya que al hacerlo varias veces se produce un error, ya que no se puede usar la opción$ operador varias veces.

.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
})

¿Es posible seleccionar la proyección para un objeto obtenido por el operador posicional en Mongoose?

Respuestas a la pregunta(1)

Su respuesta a la pregunta