MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Mongoose:il cast su ObjectId non è riuscito per il valore

L'esempio dei documenti mongoose a cui hai fatto riferimento utilizza Number per personSchema._id campo e ObjectId per gli altri.

Presumo che lo facciano nell'esempio solo per dimostrare che è possibile utilizzare entrambi. Se non specifichi _id nello schema, ObjectId sarà l'impostazione predefinita.

Qui, tutti i tuoi record hanno un _id campo che è un ObjectId , eppure li stai trattando come numeri. Inoltre, campi come personID e taskID non esistono, a meno che tu non abbia omesso la parte in cui le definisci.

Se volevi usare i numeri per tutti i tuoi _id campi, dovresti definirlo negli schemi.

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

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

Quindi per creare una notizia con un ID particolare e assegnarla a un creatore:

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

Tuttavia, la cosa da notare qui è che quando usi qualcosa di diverso da ObjectId come _id campo, ti stai assumendo la responsabilità di gestire questi valori da solo. Gli ObjectId vengono generati automaticamente e non richiedono alcuna gestione aggiuntiva.

Modifica:ho anche notato che stai memorizzando i riferimenti su entrambi i lati delle tue associazioni. Questo è assolutamente valido e potresti volerlo fare a volte, ma tieni presente che dovresti occuparti di memorizzare i riferimenti tu stesso nel pre gancio.