种植Node / MongoDB应用程序的最佳方法是什么?

所以,我是新来的MEAN堆栈,我试图种下MongoDB。 我正在使用Mongoose与数据库进行通信,还有一堆文档提示我应该能够使用填充的JSON文件进行种子处理。

我试过了:

节点 – 孟加拉种子 ; 非常简单,但是一直抛出数组结尾的错误。 (也许失踪的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种子 也很简单,基本上把JSON对象放到一个variables中,然后导出到数据库。 有希望,但是…更多的错误…

 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结构中的一个语法错误,但是玩这个并没有产生任何真正的解决scheme(或者我错过了它)。 我的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); 

任何有关如何解决这些问题的见解将不胜感激。 谢谢!

您可以使用mongoimport在CLI中填充MongoDB

它会将JSON文件加载到指定的MongoDB实例和集合中,只需要一个mongod实例在执行之前运行。

这里是使用mongoimport的演练 。

你的JSON不会stream动你的模式。

修复你的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." } ] } } 

您可以使用mongoose-data-seed编写自己的种子脚本,以便与您的mongoose模型进行交互: https : //github.com/sharvit/mongoose-data-seed