Тут на самом деле все зависит от функционала, который вы хотите реализовать.
Я бы делал, это все отдельными моделями, так можно будет реализовать их нормальное редактирование и изменение, с подтяжкой во все созданные сущности.
Т.е структура выглядела бы как-то так:
User {
_id: ObjectId('...'),
notes: [
ObjectId('Note1...'),
ObjectId('Note2...'),
ObjectId('Note3...')
]
}
Note {
_id: ObjectId('Note1...'),
...,
labels: [
ObjectId('Label 1'),
ObjectId('Label 2'),
]
}
Label {
_id: ObjectId('Label 1'),
name: "Label 1"
}
Опять же формально, лейблы можно хранить и прямо в записях, но тогда такая задачка, как фильтрация по какому-то из лейблов становится неоправданно сложнее + сложнее будет держать консистентность данных.