sql >> Base de Datos >  >> NoSQL >> MongoDB

Mongoose:la conversión a ObjectId falló por valor

El ejemplo de los documentos de mongoose a los que hizo referencia usa Number para personSchema._id campo y ObjectId para los demás.

Supongo que hacen esto en el ejemplo solo para demostrar que es posible usar cualquiera de los dos. Si no especifica _id en el esquema, ObjectId será el predeterminado.

Aquí, todos sus registros tienen un _id campo que es un ObjectId , sin embargo, los estás tratando como números. Además, campos como personID y taskID no existen, a menos que haya omitido la parte donde los define.

Si desea utilizar números para todos sus _id campos, tendría que definir eso en los esquemas.

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

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

Luego, para crear una noticia con una identificación particular y asignarla a un creador:

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

Sin embargo, lo que hay que tener en cuenta aquí es que cuando usa algo que no sea ObjectId como el _id usted mismo asume la responsabilidad de administrar estos valores. Los ObjectIds se generan automáticamente y no requieren administración adicional.

Editar:también noté que está almacenando referencias en ambos lados de sus asociaciones. Esto es totalmente válido y es posible que desee hacerlo a veces, pero tenga en cuenta que debe encargarse de almacenar las referencias usted mismo en el pre gancho.