2014-06-27 4 views
0

J'ai à la fois un schéma utilisateur et un schéma de message qui sont actuellement séparés, mais qui doivent être liés.Créer un schéma utilisateur indépendant et l'intégrer dans un schéma de message avec Mongoose/MongoDB?

var schemaUser = new Schema({ 
    username: String, 
    encryptPass: String, 
    created: Date 
}); 

var schemaMessage = new Schema({ 
    from: String, 
    to: [String], 
    message: String, 
    created: Date 
}); 

peut le schéma utilisateur soit créé indépendamment du schéma du message, mais être intégrés dans un tableau dans un « à: » champ du schéma du message?

var schemaMessage = new Schema({ 
    from: String, 
    to: [schemaUser], 
    message: String, 
    created: Date 
}); 

A partir de là, pourrait chaque doc utilisateur intégré dans le « à: » champ ont un autre document intégré des « vues »: et d'autres domaines liés à chaque utilisateur de chaque message?

Est-ce que cela représente différents critères « vue » et « lire » pour plusieurs utilisateurs embarqués:

var schemaMessage = new Schema({ 
    from: String, 
    to: [ 
       { 
        schemaUser 
       }, 
       { 
        view: { 
         inbox: Boolean, 
         outbox: Boolean, 
         archive: Boolean 
        } 
       }, 
       { 
        read: { 
         marked: Boolean, 
         datetime: Date 
        }, 
       } 
      ], 
    message: String, 
    created: Date 
}); 
+0

Votre deuxième liste est parfaitement valide. Je ne sais pas exactement ce que vous obtenez avec la troisième liste, ce qui n'est pas valable. Pourquoi ces parties font-elles partie d'un champ "à"? Sûrement ils seraient les propriétés du message ou autre chose. –

+0

@NeilLunn pour le troisième, il peut y avoir plusieurs utilisateurs dans le champ to: et chaque utilisateur peut avoir catégorisé le message différemment (inbox/archive/trash..etc.), Chaque utilisateur a marqué le message lu à un point différent dans le temps .. Comment ces facteurs seraient-ils mieux représentés? – StackThis

Répondre

1

Vous semblez vouloir quelque chose qui fait abstraction essentiellement « Utilisateur » avec quelques attributs personnalisés qui sont spécifiques à ce statut de l'utilisateur sur le message:

var schemaUser = new Schema({ 
    username: String, 
    encryptPass: String, 
    created: Date 
}); 

var schemaUserMessage = new Schema({ 
    user: { "type": Schema.ObjectId, "ref": "User" } 
    username: String, 
    view: { 
     inbox: Boolean, 
     outbox: Boolean, 
     archive: Boolean 
    }, 
    read: { 
     marked: { "type": Boolean, default: false }, 
     date: Date 
    } 
}); 

var schemaMessage = new Schema({ 
    from: String, 
    to: [schemaUserMessage], 
    message: String, 
    created: Date 
}); 

var User = mongoose.model("User", userSchema); 
var Message = mongoose.model("Message", messageSchema); 

Alors que la définition du schéma intermédiaire qui est encore intégré a l'information pour les propriétés qui se rapportent à leur situation particulière « vue » du dat a ainsi que de garder certaines informations sur l'utilisateur approprié. Le "nom d'utilisateur" a du sens pour rester intégré dans ce contexte car vous l'utiliserez fréquemment et ne voudrez pas peupler un modèle externe. Mais l'objet utilisateur "entier", qui peut en fait avoir plus de champs que celui montré, n'a vraiment pas beaucoup de sens à intégrer à chaque fois.

Vous conservez toujours la référence, donc si vous avez besoin de plus de détails, les informations peuvent facilement être référencées à partir du _id qui sera conservé par rapport à "utilisateur" pour le schéma étranger.

De plus, toutes ces propriétés sont correctement définies en tant que membres d'un élément de tableau par utilisateur dans la section "à", ce qui est vraiment ce que vous voulez.

+0

Très, très cool. Vraiment apprécier toutes les réponses en date de ces derniers temps. Vraiment reconnaissant, – StackThis

Questions connexes