¿Cómo genero una identificación única para cada entrada en mi mongoDB a través de Postman?
Ejecuto postman POST con http://localhost:8000/api/user/store y envío
{ "name":"testname", "email":"testemail@test.com", "phone":"testnumber", "city":"testcity", }Esto se guarda en mi mongoDB y muestra esto en mi brújula mongoDB
_id:61f7e48f0c651345677b7775 name:"testname" email:"testemail@test.com" phone:"testnumber" city:"testcity" __v:0¿Cómo puedo generar una ID única y agregarla entre este proceso para que se guarde de esta manera?
_id:61f7e48f0c651345677b7775 uniqueID:68465135 name:"testname" email:"testemail@test.com" phone:"testnumber" city:"testcity" __v:0Mi modelo userData.js se ve así:
const mongoose = require('mongoose'); const Schema = mongoose.Schema; const userSchema = new Schema({ name: { type: String, required: true }, email: { type: String, required: true }, phone: { type: String, required: true }, city: { type: String, required: true }, }, { timeStamps: true }) const User = mongoose.model('User', userSchema); //export model to use in other files module.exports = User; Este es el fragmento de UserController.js sobre cómo se guardan los datos
// Saves user to the database const store = (req, res, next) => { let user = new User({ name: req.body.name, email: req.body.email, phone: req.body.phone, city: req.body.city, }) user.save() .then(response => { res.json({ message: 'User added successfully!' }) }) .catch(error => { res.json({ message: 'An error occured!' }) }) }El ID único puede ser cualquier cosa que acabo de agregar numérico como ejemplo. Pero tiene que ser único. ¿Cómo puedo hacer esto? Cualquier sugerencia sería útil.
Hasta donde yo sé, _id ( ObjectId ) ya es único, y si desea proporcionar su propio _id , solo necesita configurarlo en la entidad.
Puede usar _id de MongoDB, ya que siempre será único. Si no le gusta el formato de MongoDB _id , puede cambiarlo a nanoid .
Con nuevo campo de uniqueId
import { nanoid } from 'nanoid'; const UserSchema = new mongoose.Schema({ name: string, uniqueId: { type: String, required: true, default: () => nanoid(7), index: { unique: true }, }, email: String, phone: String, city: String, })_id con nanoid para que no cree un campo adicional en su esquema import { nanoid } from 'nanoid'; const UserSchema = new mongoose.Schema({ _id: { type: String, default: () => nanoid(), }, name: string, email: String, phone: String, city: String, }) // Saves user to the database const store = async (req, res, next) => { const { name, email, phone, city} = req.body; try { let user = new User({ name, email, phone, city, }); const savedUser = await user.save(); return res.json({ message: 'User added successfully!', }); } catch (error) { console.log(error) return res.json({ message: 'An error occured!', }); } };El controlador javascript mongodb ya tiene UUID :
db.foo.insert( {x: new UUID()} ); db.foo.aggregate([ {$project: {x:true, x_type: {$type: "$x"}}} ]); { "_id" : ObjectId("61f81af6a565bb368b38e345"), "x" : UUID("b639a8b5-2598-429f-92e0-630c6b5bfbdc"), "x_type" : "binData" } Si no le gusta el objeto UUID real, capture su representante de cadena. Tenga en cuenta que, lamentablemente, toString() en el objeto no 892ab869-3339-41b3-a612-5c29871f4e57 sino todo el UUID("892ab869-3339-41b3-a612-5c29871f4e57") , por lo que debe substr :
db.foo.insert( {x: (new UUID()).toString().substr(6,36) }); db.foo.aggregate([ {$project: {x:true, x_type: {$type: "$x"}}} ]); { "_id" : ObjectId("61f81b56a565bb368b38e348"), "x" : "d5af9fb4-768c-4e17-b69a-8bcd80f8bf1e", "x_type" : "string" } O, para simplificar, puede usar el método hex() :
db.foo.insert( {x: (new UUID()).hex() } ); db.foo.aggregate([ {$project: {x:true, x_type: {$type: "$x"}}} ]); { "_id" : ObjectId("61f81ba9a565bb368b38e34e"), "x" : "b9810abea4344932b3da15f7f0d58e2c", // note the dashes went away "x_type" : "string" } En todos los casos, el controlador, NO el servidor, creará un _id único si no se proporciona. La creación de una identificación única que no esté vinculada a la base de datos (por ejemplo _id ) puede ser valiosa al integrar y mover datos (compárelo con mover ROWID fuera de Oracle en un CSV; no es muy útil). NOTA: El tipo generado predeterminado para _id es ObjectId , que es un tipo en BSON y no está necesariamente vinculado a MongoDB. Dicho esto, UUID es aún más una "clave de máquina/DB" en comparación con una clave comercial familiar que se puede hacer única.