2016-03-15 94 views
8

所以,我是新来的MEAN堆栈,并且我试图种下MongoDB。我正在使用Mongoose与数据库进行通信,并且有大量文档建议我应该能够使用填充的JSON文件进行种子处理。播种Node/MongoDB应用程序的最佳方法是什么?

我已经试过:

node-mongo-seed;非常直截了当,但一直抛出阵列末尾的错误。 (或许丢失BSON模块有故障?)

{ [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 {] 

mongoose-seed;也很简单,基本上把JSON对象放入一个变量,然后导出到数据库。有前途的,但是...更多错误...

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... 

所以,我的想法是,它很可能是JSON结构中的语法错误,但与玩弄没有取得任何真正的解决方案(也许我错过了吗?)。我的JSON的示例:

{ 
    { 
     "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." 
      } 
     ] 
    } 
} 

另外,我不完全知道如何在JSON中指定的子文档(假设我可以播种进程摆在首位正常工作)。

这里是我的模型:

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); 

如何导航这些问题的任何有识之士将不胜感激。谢谢!

回答

9

可以使用mongoimport

它会加载一个JSON文件到指定的MongoDB实例&集合填充的MongoDB在CLI中,你需要的是一个mongod实例是在执行前运行。

这里是使用mongoimportwalkthrough的。

+0

这肯定帮我完成我正在寻找,至少部分方面。我不确定如何修改该过程以包含子文档(很可能是'mongodump'),但这是向正确方向迈出的一大步。谢谢! – Antwisted

+0

当你说包括子文档时,你是什么意思? – peteb

+0

[这篇文章](http://stackoverflow.com/questions/29354858/create-id-on-subdocuments-on-mongoimport-jsonarray)可能会有助于你有关'mongoimport'的subdocs – peteb

1

你JSON不会流动你的模式。

解决您的JSON这样:

{ 
    { 
     "name": "Dan's Place", 
     "rating": 3, 
     "address": "125 High Street, New York, 10001", 
     "coordinates": [-73.0812, 40.8732], 
     "attributes": ["Hot drinks", "Food", "Premium wifi"], 
     "openHours": [ 
      { 
       "days": "Monday - Friday", 
       "opening": "7:00am", 
       "closing": "7:00pm", 
       "closed": false 
      }, 
      { 
       "days": "Saturday", 
       "opening": "8:00am", 
       "closing": "5:00pm", 
       "closed": false 
      }, 
      { 
       "days": "Sunday", 
       "closed": true 
      } 
     ], 
     "reviews": [ 
      { 
       "rating": 4, 
       "author": "Philly B.", 
       "timestamp": "new Date('Feb 3, 2016')", 
       "body": "It was fine, but coffee was a bit dull. Nice atmosphere." 
      }, 
      { 
       "rating": 3, 
       "author": "Tom B.", 
       "timestamp": "new Date('Feb 23, 2016')", 
       "body": "I asked for her number. She said no." 
      } 
     ] 
    }, 
    { 
     "name": "Jared's Jive", 
     "rating": 5, 
     "address": "747 Fly Court, New York, 10001", 
     "coordinates": [-73.0812, 40.8732], 
     "attributes": ["Live Music", "Rooftop Bar", "2 Floors"], 
     "openHours": [ 
      { 
       "days": "Monday - Friday", 
       "opening": "7:00am", 
       "closing": "7:00pm", 
       "closed": false 
      }, 
      { 
       "days": "Saturday", 
       "opening": "8:00am", 
       "closing": "5:00pm", 
       "closed": false 
      }, 
      { 
       "days": "Sunday", 
       "closed": true 
      } 
     ], 
     "reviews": [ 
      { 
       "rating": 5, 
       "author": "Jacob G.", 
       "timestamp": "new Date('Feb 3, 2016')", 
       "body": "Whoa! The music here is wicked good. Definitely going again." 
      }, 
      { 
       "rating": 4, 
       "author": "Tom B.", 
       "timestamp": "new Date('Feb 23, 2016')", 
       "body": "I asked to play her a tune. She said no." 
      } 
     ] 
    } 
} 

您可以使用猫鼬数据种子编写自己的种子脚本与交互您的猫鼬型号: https://github.com/sharvit/mongoose-data-seed

相关问题