Mongoose: Cast to ObjectId a échoué pour la valeur
Je suis en train de spécifier le schéma de ma db dans la mangouste. Pour le moment je fais ceci:
var Schema = mongoose.Schema;
var today = new Date(2011, 11, 12, 0, 0, 0, 0);
var personSchema = new Schema({
_id : Number,
name: { type: String, required: true },
tel: { type: String, required: true },
email: { type: String, required: true },
newsitems: [{ type: Schema.Types.ObjectId, ref:'NewsItem'}]
});
var taskSchema = new Schema({
_id: Number,
description: { type: String, required: true },
startDate: { type: Date, required: true },
newsitems: [{ type: Schema.Types.ObjectId, ref:'NewsItem'}]
});
var newsSchema = new Schema({
_id: Number,
creator : { type: Schema.Types.ObjectId, ref: 'Person' },
task : { type: Schema.Types.ObjectId, ref: 'Task' },
date: { type: Date, required:true },
loc: {type: String, required: true }
});
var NewsItem = mongoose.model('NewsItem', newsSchema);
var Person = mongoose.model('Person', personSchema);
var Task = mongoose.model('Task', taskSchema);
var tony = new Person({_id:0, name: "Tony Stark", tel:"234234234", email:"[email protected]" });
var firstTask = new Task({_id:0, description:"Get an interview with the president", startDate:today});
var newsItem1 = new NewsItem({_id:0, creator: tony.id, task: firstTask.id, date: today, loc: "NY"});
newsItem1.save(function (err) {
if (err) console.log(err);
firstTask.save(function (err) {
if (err) console.log(err);
});
tony.save(function (err) {
if (err) console.log(err);
});
});
NewsItem
.findOne({ loc: "NY" })
.populate('creator')
.populate('task')
.exec(function (err, newsitem) {
if (err) console.log(err)
console.log('The creator is %s', newsitem.creator.name);
})
Je créer les schémas et essayez d'enregistrer certaines données.
L'erreur:
{ message: 'Cast to ObjectId failed for value "0" at path "creator"',
name: 'CastError',
type: 'ObjectId',
value: '0',
path: 'creator' }
J'ai écrit ce code sur la base de : http://mongoosejs.com/docs/populate.html#gsc.tab=0
La db que j'essaie de créer ressemble à ceci: Spécifier le schéma de la mangouste .
Comment puis-je résoudre ce problème?
source d'informationauteur Olivier_s_j
Vous devez vous connecter pour publier un commentaire.
L'exemple de la mangouste docs que vous l'avez mentionné utilise
Number
pour lapersonSchema._id
champ, etObjectId
pour les autres.Je suppose qu'ils le font dans l'exemple pour démontrer qu'il est possible d'utiliser soit. Si vous ne spécifiez pas
_id
dans le schéma,ObjectId
sera la valeur par défaut.Ici, tous vos enregistrements ont un
_id
champ qui est unObjectId
mais vous traiter comme des numéros. En outre, les champs commepersonID
ettaskID
n'existent pas, sauf si vous avez quitté la partie où vous les définir.Si vous ne souhaitez utiliser les nombres pour tous vos
_id
champs, vous devez définir que dans les schémas.Pour créer un point de presse avec un ID particulier, et de l'attribuer à un créateur:
Cependant la chose à noter ici est que si vous utilisez autre chose que
ObjectId
comme le_id
de terrain, vous prenez la responsabilité de la gestion de ces valeurs vous-même. ObjectIds sont générés automatiquement et ne nécessitent pas de gestion supplémentaires.Edit: j'ai aussi remarqué que vous stockiez des refs sur les deux côtés de vos associations. C'est tout à fait valide et vous pouvez le faire parfois, mais notez que vous auriez à prendre soin de stocker les références de vous dans la
pre
crochet.J'ai reçu ce message d'erreur après la création d'un schéma:
CastError: Cast to ObjectId failed for value “[object Object]” at path “_id”
Ensuite, la modification et n'a pas pu le retrouver. J'ai supprimé tous les documents dans la collection et je pourrais ajouter 1 objet, mais pas la seconde. J'ai fini par la suppression de la collecte de Mongo et qui a travaillé comme Mangouste recréé la collection.