MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Mongoose:A conversão para ObjectId falhou por valor


O exemplo dos documentos do mangusto que você mencionou usa Number para o personSchema._id campo e ObjectId para os outros.

Presumo que eles façam isso no exemplo apenas para demonstrar que é possível usar ambos. Se você não especificar _id no esquema, ObjectId será o padrão.

Aqui, todos os seus registros têm um _id campo que é um ObjectId , mas você os está tratando como números. Além disso, campos como personID e taskID não existem, a menos que você tenha deixado de fora a parte onde você os define.

Se você quiser usar números para todos os seus _id campos, você teria que definir isso nos esquemas.
var newsSchema = new Schema({
  _id: Number,
  _creator: {type: ObjectId, ref: "Person"},
  // ...
})

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

Em seguida, para criar um item de notícias com um ID específico e atribuí-lo a um criador:
var tony = new Person({_id: 0});
var newsItem = new NewsItem({_id: 0, creator: tony.id});

No entanto, o que deve ser observado aqui é que, quando você usa algo diferente de ObjectId como o _id campo, você está assumindo a responsabilidade de gerenciar esses valores por conta própria. ObjectIds são gerados automaticamente e não requerem gerenciamento extra.

Edit:também notei que você está armazenando refs em ambos os lados de suas associações. Isso é totalmente válido e você pode querer fazer isso algumas vezes, mas note que você teria que cuidar de armazenar as referências você mesmo no pre gancho.