En tu couple modelo, person1 es un ObjectID (sé que lo sabe), por lo que obviamente no tiene ninguna propiedad .firstname .
En realidad, la mejor manera de lograr esto es encontrar al usuario por su nombre y luego consultar a la pareja, con el id del usuario.
Este método podría/debería estar en la couple modelo como método estático (ejemplo de código simplificado):
couple.statics.findByPersonFirstname = function (firstname, callback) {
var query = this.findOne()
Person.findOne({firstname: firstname}, function (error, person) {
query.where($or: [
{person1: person._id},
{person1: person._id}
]).exec(callback);
})
return query
}
Solo Me gusta este ejemplo .
EDITAR:también tenga en cuenta que la referencia debe ser _id (así que no podría almacenar con el primer nombre, sería una mala idea de todos modos).
Teniendo en cuenta tu edición:
Person._id es quizás una String y la referencia es un ObjectId , si es así, intente:
{person1: mongoose.Types.ObjectId(Person._id)}
Además, su variable es person y no Person . Intenta registrar a person a ver si te sale algo.
Finalmente, mi ejemplo de código es realmente simple, no olvides manejar los errores y todo (ver el enlace que te di arriba, que está completo).