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.