1

I have architectural question about how to design my meanjs controller and routes for mongoose subdocuments.

my model looks as following:

'use strict';

/**
 * Module dependencies.
 */
var mongoose = require('mongoose'),
  Schema = mongoose.Schema;

/**
 * Customerrpc Schema
 */
var CustomerrcpSchema = new Schema({
  company: {
    type: String,
    enum: ['Option1', 'Option2'],
    required: 'Please fill company name'
  },
  rcp: {
    type: String,
    required: 'Please fill rcp'
  },
  created: {
    type: Date,
    default: Date.now
  },
  user: {
    type: Schema.ObjectId,
    ref: 'User'
  }
});

/**
 * Customer Schema
 */
var CustomerSchema = new Schema({
  name: {
    type: String,
    default: '',
    required: 'Please fill Customer name',
    trim: true
  },
  description: {
    type: String,
    default: '',
    //required: 'Please fill Customer description',
    trim: true
  },
  url: {
    type: String,
    default: '',
    //required: 'Please fill Customer url',
    trim: true
  },
  rcp: [CustomerrcpSchema],
  created: {
    type: Date,
    default: Date.now
  },
  user: {
    type: Schema.ObjectId,
    ref: 'User'
  }
});

mongoose.model('Customer', CustomerSchema);
mongoose.model('Customerrcp', CustomerrcpSchema);

I tried it out by adding on the server controller the following code during the create methode:

exports.create = function(req, res) {
  var customer = new Customer(req.body);
  customer.user = req.user;


  var rcp = new Customerrcp({
    company: 'Option1',
    rcp: 'dumm',
    user: req.user
  });

  customer.rcp = rcp;


  customer.save(function(err) {
    if (err) {
      return res.status(400).send({
        message: errorHandler.getErrorMessage(err)
      });
    } else {
      res.jsonp(customer);
    }
  });
};

This works perfectly fine. Now my question is what is the best procedure to create / modify / remove a subdocument from the maindocument?

I thought of always work with the main document 'Customer' but this brings several issues with it that i dont like, like saving always the hole document. Since i do have a uniq _id for each subdocument i guess there must be a better way.

What i would like to have is a controller only for the subdocument with the create / save / remove statement for it. Is this even possible?

As far as i understand it: to create a new subdocument i need the following: _id of the main document for the mongoose query. So i need a service which would handover the _id of the maindocument to the controller of the selected subdocument. I was able to do this.

But im insecure if this is the proper way. Any Ideas?

Cheers, Michael

mstampfli
  • 21
  • 3
  • are you deliberately choosing a subdocument vs. a relationship? If you have a subdocument, you always need to know the main document in order to manipulate the subdocument. If you need to manipulate the subdocument independently, you might want to look into creating a separate collection for it and reference it. – sebbulon Jun 09 '16 at 09:12
  • Thank you for your feedback! Yes i got that solution as well. Well relation is not the best solution for this application, since i will not grow ober 2-3MB wer entry, its more than sutable and much simpler :) But Thank you for your response! – mstampfli Jun 16 '16 at 08:57

0 Answers0