2017-06-20 23 views
0

Ich habe 2 Modelle, an denen ich arbeite. Ein Benutzer kann viele Filme haben, die er mag, und ein Film kann von mehr als einem Benutzer gemocht werden. Ich habe beschlossen, diese Informationen in jedem Benutzer zu speichern.Mongoose Store Array von ObjectId

Ich versuche, die MovieID im Array zu speichern moviesLiked aber jedes Mal, wenn ich spare, wirft es einen Fehler, CastError: Guss zu ObjectId für Wert fehlgeschlagen ‚1234‘ im Weg ‚moviesLiked‘.

Ich habe versucht, das Filmobjekt abzurufen und die movie.id in das Array zu schieben, aber es schien nicht für mich zu funktionieren und wurde seitdem entfernt. Ich könnte es falsch gemacht haben und wäre nett, wenn mir jemand sagen würde, in welche Richtung ich mich bewegen sollte, da ich neu in Mongoose bin.

Ressource basierend auf Array of ObjectIds in Mongoose 3.8

user.js

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var UserSchema = new Schema({ 
    username: String, 
    moviesLiked: [{ type: Schema.ObjectId, ref: 'Movie' }] 
}); 

module.exports = mongoose.model('User', UserSchema); 

movie.js

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var MovieSchema= new Schema({ 
    id: Number, 
    name: String, 
}); 

module.exports = mongoose.model('Movie', MovieSchema); 

Und schließlich in meine Routen/index.js

router.route('/api/users/:userid/:movieid').put(function(req, res) { 
    User.findByIdAndUpdate(
     req.params.userid, 
     { '$push': { 'moviesLiked': req.params.movieid } }, 
     function(err, user) { 
      console.log(user); 
     } 
    ); 
}); 

Update: zog die ID stattdessen. Funktioniert aber nicht.

router.route('/api/users/:userid/:movieid').put(function(req, res) { 
    Movie.findById(req.params.movieid, function(err, movies) { 
     User.findByIdAndUpdate(
      req.params.userid, 
      { '$push': { 'moviesLiked': movies.id } }, 
      function(err, user) { 
       console.log(user); 
      } 
     ); 
    }); 
}); 
+0

Gibst du dich r Film ID aus Ihrem Schema als Route Param oder der Mongodb _id? –

+0

Es ist als Route Param übergeben. Ich habe versucht, findById() die movieId abzurufen und die mongo _id auch vorher mit movie.id zu übergeben, aber immer noch das gleiche Ergebnis. –

+0

Übergeben Sie die standardmäßige MongoDB-ID als Routenparameter und nicht das ID-Feld, das Sie in Ihrem Schema definiert haben. –

Antwort

0

Ihre eigene ID ist vom Typ Zahl, aber Ihre moviesLiked Array erwartet Typ ObjectId.

Ihr moviesLiked-Array sollte eine Liste von IDs enthalten, die dem _id-Standardfeld Ihres Movie-Modells entsprechen.

Ich glaube Refs kann nur Referenz _id aber wenn Sie möchten, dass Ihre eigene ID verwenden, dann könnten Sie versuchen _id zu Ihrer eigenen ID in Ihrer MovieSchema Einstellung und dann moviesLiked Typ festgelegt in Ihrem UserSchema zum Spiel:

user.js

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var UserSchema = new Schema({ 
    username: String, 
    moviesLiked: [{ type: Number, ref: 'Movie' }] 
}); 

movie.js

module.exports = mongoose.model('User', UserSchema); 


var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var MovieSchema= new Schema({ 
    _id: { type: Number, unique: true }, 
    name: String, 
}); 

module.exports = mongoose.model('Movie', MovieSchema); 
Verwandte Themen