2016-05-03 9 views
2

Hallo ich bin neu js Knoten und Mungo ich habe zwei Systeme, und ich will Schema-Objekt innerhalb des anderen Schema meine Systemewie Sie das Schema innerhalb des Schema-Arrays posten und aktualisieren und es ausdrucken?

user.js

// grab the things we need 
var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var Genre = require('../Models/genre'); 

// create a schema 
var userSchema = new Schema({ 
    name: { type: String, required: true, unique: true , index:true}, 
    email: { type: String, required: true, unique: true }, 
    password: { type: String, required: true }, 
    age: String, 
    gender: String, 
    genres: [{type: Schema.ObjectId, ref: Genre.Genre}] //this is the genre schema - the user can have many genres 
}); 

// the schema is useless so far 
// we need to create a model using it 
var User = mongoose.model('User', userSchema); 

// make this available to our users in our Node applications 
module.exports = User; 

auch

zu tun haben versucht haben,
genres: [{type: Schema.Type.ObjectId, ref: Genre.Genre}] 
and genres: ['Genre'] 

und genre.js

// grab the things we need 
var mongoose = require('mongoose'); 
var Schema = mongoose.Schema, 
    ObjectId = Schema.ObjectId; 

// create a schema 
var genreSchema = new Schema({ 
    name: { type: String, required: true, unique: true, index: true }, 
    age: String, 
    gender: String 
}); 

// the schema is useless so far 
// we need to create a model using it 
var Genre = mongoose.model('Genre', genreSchema); 

// make this available to our genres in our Node applications 
module.exports = Genre; 

zuerst möchte ich wissen, ob es der Weg ist, das zu tun? Es gibt einen besseren Weg?

, wenn ich Benutzer von Postbote Post der Benutzer das Hinzufügen, aber ich habe nicht die volle Genre bekommen und ich weiß nicht, ob ihr Recht

gespeichert

ist dies die json Ich poste

{ 
"name":"erez", 
"age": "23", 
"password":"erez1234", 
"email":"[email protected]", 
"gender":"Male", 
"genres": ["57285fe32c3c15e40c000001"] /// what should be here? is it right? 
} 

und das ist die erhalten Benutzer JSon

[ 
    { 
    "_id": "572874be9b43cb4834000002", 
    "name": "erez", 
    "age": "23", 
    "password": "yaniv1234", 
    "email": "[email protected]", 
    "gender": "Male", 
    "__v": 0, 
    "genres": [ 
     "57285fe32c3c15e40c000001" 
    ] 
    } 
] 

wenn ihr Recht , wie ich die vollen Benutzer mit allen Genres auf einem get-Benutzer senden kann?

Hoffnung i klar genug bin

Dank für die Helfer

Antwort

1

Wenn Sie die Referenzen zu definieren, das ref Attribut muss genau mit dem Modellnamen sonst in Ihrem Modell Definition entspricht, werden Sie eine Fehlermeldung erhalten. Der ref Wert ein String sein sollte, nicht ein Objekt, wie Sie getan haben, so sollte die richtige Art und Weise

genres: [{type: Schema.ObjectId, ref: 'Genre'}] 

, wenn Sie die Daten lesen, macht Mongoose Bevölkerung liest Dokumente sehr einfach durch seine populate() Funktion . Um beispielsweise die referenzierten Genres für einen bestimmten Benutzer anzuzeigen, rufen Sie die Methode populate() mit dem Namen dieses Felds in einer Zeichenfolge als Parameter auf, z.

User.findOne({"name": "Tom"}) 
    .populate("genres") 
    .exec(err, user) { ... } 
+0

so der Post-Benutzer, den ich tue, ist richtig? und kann ich für alle Benutzer auffüllen? oder nur von findone? kann auch per findById funktionieren ?? – Erez

+0

Ja, die Art, wie Sie die Daten schreiben, ist korrekt. Wie beim Lesen kann jede der Methoden 'find()' oder 'findOne()' die Funktion 'populate()' verketten, ich habe einfach findOne als Beispiel angegeben. Dies kann auf die Methode 'find()' erweitert werden, wenn Sie für alle Benutzer auffüllen möchten. – chridam

+1

danken Sie halfen mir – Erez