5

I'm wondering if it's possible to create a table dynamically in mongodb using a Mongoose schema, Node.js and Angular for example.

The basic way to make a schema is to create a model explicitly in Node.js like this:

import mongoose from 'mongoose';
const Schema = mongoose.Schema;

const postSchema = new Schema({
    title: { type: 'String', required: true },
    content: { type: 'String', required: true },
    slug: { type: 'String', required: true }
});

let Post = mongoose.model('Post', postSchema);

Is it possible to create this schema dynamically by using the user input from an Angular frontend?

1

1 Answer 1

5

Sure it's possible... - suggesting using express as server framework:

import mongoose from 'mongoose';
import { Router } from 'express';
const router = Router();

router.post('/newModel/', createNewModel);

function createNewModel(req, res, next) {
  const Schema = mongoose.Schema;
  // while req.body.model contains your model definition
  mongoose.model(req.body.modelName, new Schema(req.body.model));
  res.send('Created new model.');
}

...but please be careful! Opening a way for users to modify your database so easily is usually not a good idea.

Update: The format is exactly the same as the one you want to have in the paranthesis:

{
  "title": { "type": "String", "required": "true" },
  "content": { "type": "String", "required": "true" },
  "slug": { "type": "String", "required": "true" }
}
Sign up to request clarification or add additional context in comments.

3 Comments

Thnaks @noChance for your answer, But could u mention the form of the JSON format sent by angular for exemple in req.Model ?
I tried to send this by postman : { "ModelName":"Test", "ModelContent":{ "title": "{ type: 'String', required: true }", "content": "{ type: 'String', required: true }" } } but it gives me en error :TypeError: Undefined type { type: 'String', required: true } at title
you JSON object is not valid, I tried to send it using Postman it gives a syntax error, can u help please ?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.