Nella tua couple modello, person1 è un ObjectID (so che lo conosci), quindi ovviamente non ha alcuna proprietà .firstname .
In realtà il modo migliore per raggiungere questo obiettivo è trovare l'utente in base al suo nome e quindi interrogare la coppia con l'id dell'utente.
Questo metodo potrebbe/dovrebbe stare nella couple modello come metodo statico (esempio di codice semplificato):
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 come questo esempio .
EDIT:Nota anche che il ref deve essere il _id (quindi non puoi archiviare con il nome, sarebbe comunque una cattiva idea).
Considerando la tua modifica:
Person._id è forse una String e il riferimento è un ObjectId , in tal caso, prova:
{person1: mongoose.Types.ObjectId(Person._id)}
Inoltre, la tua variabile è person e non Person . Prova ad accedere a person per vedere se ottieni qualcosa.
Infine, il mio esempio di codice è davvero semplice, non dimenticare di gestire gli errori e tutto il resto (vedi il link che ti ho fornito sopra, che è completo).