MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Mongoose :Échec de la conversion en ObjectId pour la valeur

L'exemple de la documentation sur la mangouste que vous avez référencée utilise Number pour le personSchema._id champ et ObjectId pour les autres.

Je suppose qu'ils le font dans l'exemple uniquement pour démontrer qu'il est possible d'utiliser l'un ou l'autre. 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 un ObjectId , pourtant vous les traitez comme des numéros. De plus, des champs comme personID et taskID n'existent pas, sauf si vous avez omis la partie où vous les définissez.

Si vous vouliez utiliser des chiffres pour tous vos _id champs, vous devrez définir cela dans les schémas.

var newsSchema = new Schema({
  _id: Number,
  _creator: {type: ObjectId, ref: "Person"},
  // ...
})

var personSchema = new Schema({
  _id: Number,
  // ...
})

Ensuite, pour créer une actualité avec un identifiant particulier, et l'attribuer à un créateur :

var tony = new Person({_id: 0});
var newsItem = new NewsItem({_id: 0, creator: tony.id});

Cependant, la chose à noter ici est que lorsque vous utilisez autre chose que ObjectId comme _id domaine, vous assumez la responsabilité de gérer vous-même ces valeurs. Les ObjectIds sont générés automatiquement et ne nécessitent aucune gestion supplémentaire.

Edit :J'ai également remarqué que vous stockez des références des deux côtés de vos associations. Ceci est tout à fait valable et vous voudrez peut-être le faire parfois, mais notez que vous devrez prendre soin de stocker vous-même les références dans le pre crochet.