J'essaie de créer dynamiquement des _id pour mes modèles Mongoose en comptant les documents dans la base de données et en utilisant ce nombre pour créer le _id (en supposant que le premier _id est 0). Cependant, je ne peux pas obtenir le _id à définir à partir de mes valeurs. Voici mon code:
//Schemas
var Post = new mongoose.Schema({
//_id: Number,
title: String,
content: String,
tags: [ String ]
});
var count = 16;
//Models
var PostModel = mongoose.model( 'Post', Post );
app.post( '/', function( request, response ) {
var post = new PostModel({
_id: count,
title: request.body.title,
content: request.body.content,
tags: request.body.tags
});
post.save( function( err ) {
if( !err ) {
return console.log( 'Post saved');
} else {
console.log( err );
}
});
count++;
return response.send(post);
});
J'ai essayé de définir le _id de différentes manières, mais cela ne fonctionne pas pour moi. Voici la dernière erreur:
{ message: 'Cast to ObjectId failed for value "16" at path "_id"',
name: 'CastError',
type: 'ObjectId',
value: 16,
path: '_id' }
Si vous savez ce qui se passe, faites-le moi savoir.
Vous devez soit déclarer le _id
dans le cadre de votre schéma (vous l'avez commenté), ou utilisez le _id
et définissez-la sur false
(vous utilisez l'option id
, qui crée un getter virtuel pour convertir _id
à une chaîne mais toujours créé un _id
Propriété ObjectID, d'où l'erreur de transtypage que vous obtenez).
Donc, soit ceci:
var Post = new mongoose.Schema({
_id: Number,
title: String,
content: String,
tags: [ String ]
});
Ou ca:
var Post = new mongoose.Schema({
title: String,
content: String,
tags: [ String ]
}, { _id: false });
La première partie du code de @ robertklep ne fonctionne pas pour moi (mangouste 4), vous devez également désactiver _id
var Post = new mongoose.Schema({
_id: Number,
title: String,
content: String,
tags: [ String ]
}, { _id: false });
et cela fonctionne pour moi
Créez un _id personnalisé dans mangouste et enregistrez cet ID en tant que mongo _id. Utilisez mongo _id avant d'enregistrer des documents comme celui-ci.
const mongoose = require('mongoose');
const Post = new mongoose.Schema({
title: String,
content: String,
tags: [ String ]
}, { _id: false });
// request body to save
let post = new PostModel({
_id: new mongoose.Types.ObjectId().toHexString(), //5cd5308e695db945d3cc81a9
title: request.body.title,
content: request.body.content,
tags: request.body.tags
});
post.save();