Utilisez $elemMatch pour trouver un tableau imbriqué, et $ dans votre projection, alors interrogez comme ci-dessous :
Meteor.users.findOne({
"_id": userId1,
"profile.friends": {
"$elemMatch": {
"_id": userId2
}
}
}, {
"profile.friends.state.$": 1
})