title: What is the best method to seeding a Node / MongoDB application?
body: <p>So, I'm new to the MEAN stack, and I've hit a wall trying to seed MongoDB. I'm using Mongoose to communicate with the database, and there's a bunch of documentation suggesting I should be able to seed using populated JSON files.</p>
  
  <p>What I've tried:</p>
  
  <p><strong><a href="https://www.npmjs.com/package/node-mongo-seeds" rel="noreferrer">node-mongo-seed</a></strong>; Pretty straight forward, but consistently throws errors on the end of arrays. (Perhaps the missing bson module is at fault?)</p>
  
  <pre><code>{ [Error: Cannot find module '../build/Release/bson'] code: 'MODULE_NOT_FOUND' }
  js-bson: Failed to load c++ bson extension, using pure JS version
  Seeding files from directory /Users/Antwisted/code/wdi/MEAN/seeds
  ----------------------
  Seeding collection locations
  err =  [SyntaxError: /Users/Antwisted/code/wdi/MEAN/seeds/locations.json: Unexpected token {]
  </code></pre>
  
  <p><strong><a href="https://www.npmjs.com/package/mongoose-seed" rel="noreferrer">mongoose-seed</a></strong>; Also pretty straight forward, basically puts the JSON objects into a variable before exporting to the database. Promising, but... more errors...</p>
  
  <pre><code>Successfully initialized mongoose-seed
  [ 'app/models/locationsModel.js' ]
  Locations collection cleared
  Error creating document [0] of Location model
  Error: Location validation failed
  Error creating document [1] of Location model
  Error: Location validation failed
  Error creating document [2] of Location model
  Error: Location validation failed...
  </code></pre>
  
  <p>So, my thoughts were that it was probably a syntax error within the JSON structure, but playing around with that has not yielded any real solutions (or maybe I'm missing it?). Sample of my JSON:</p>
  
  <pre><code>{
      {
          "header": "Dan's Place",
          "rating": 3,
          "address": "125 High Street, New York, 10001",
          "cord1": -73.0812,
          "cord2": 40.8732,
          "attributes": ["Hot drinks", "Food", "Premium wifi"],
          "hours": [
              {
                  "days": "Monday - Friday",
                  "hours": "7:00am - 7:00pm",
                  "closed": false
              },
              {
                  "days": "Saturday",
                  "hours": "8:00am - 5:00pm",
                  "closed": false
              },
              {
                  "days": "Sunday",
                  "closed": true
              }
          ],
          "reviews": [
              {
                  "rating": 4,
                  "id": ObjectId(),
                  "author": "Philly B.",
                  "timestamp": "new Date('Feb 3, 2016')",
                  "body": "It was fine, but coffee was a bit dull. Nice atmosphere."
              },
              {
                  "rating": 3,
                  "id": ObjectId(),
                  "author": "Tom B.",
                  "timestamp": "new Date('Feb 23, 2016')",
                  "body": "I asked for her number. She said no."
              }
          ]
      },
      {
          "header": "Jared's Jive",
          "rating": 5,
          "address": "747 Fly Court, New York, 10001",
          "cord1": -73.0812,
          "cord2": 40.8732,
          "attributes": ["Live Music", "Rooftop Bar", "2 Floors"],
          "hours": [
              {
                  "days": "Monday - Friday",
                  "hours": "7:00am - 7:00pm",
                  "closed": false
              },
              {
                  "days": "Saturday",
                  "hours": "8:00am - 5:00pm",
                  "closed": false
              },
              {
                  "days": "Sunday",
                  "closed": true
              }
          ],
          "reviews": [
              {
                  "rating": 5,
                  "id": ObjectId(),
                  "author": "Jacob G.",
                  "timestamp": "new Date('Feb 3, 2016')",
                  "body": "Whoa! The music here is wicked good. Definitely going again."
              },
              {
                  "rating": 4,
                  "id": ObjectId(),
                  "author": "Tom B.",
                  "timestamp": "new Date('Feb 23, 2016')",
                  "body": "I asked to play her a tune. She said no."
              }
          ]
      }
  }
  </code></pre>
  
  <p>Additionally, I'm not entirely sure how to specify subdocuments within the JSON (assuming I can get the seeding process to work correctly in the first place).</p>
  
  <p>Here's my model:</p>
  
  <pre><code>var mongoose = require('mongoose');
  
  var subHoursSchema = new mongoose.Schema({
      days: {type: String, required: true},
      opening: String,
      closing: String,
      closed: {type: Boolean, required: true}
  });
  
  var subReviewsSchema = new mongoose.Schema({
      rating: {type: Number, required: true, min: 0, max: 5},
      author: String,
      timestamp: {type: Date, "default": Date.now},
      body: String
  }); 
  
  var locationSchema = new mongoose.Schema({
      name: {type: String, required: true},
      address: String,
      rating: {type: Number, "default": 0, min: 0, max: 5}, 
      attributes: [String],
      coordinates: {type: [Number], index: '2dsphere'},
      openHours: [subHoursSchema],
      reviews: [subReviewsSchema]
  });
  
  mongoose.model('Location', locationSchema);
  </code></pre>
  
  <p>Any insight on how to navigate these issues would be greatly appreciated. Thanks!</p>