2016-03-15 18 views
8

Vì vậy, tôi mới vào ngăn xếp MEAN, và tôi đã nhấn một bức tường cố gắng để hạt giống MongoDB. Tôi đang sử dụng Mongoose để giao tiếp với cơ sở dữ liệu, và có một loạt tài liệu gợi ý rằng tôi có thể sử dụng các tệp JSON được điền vào.Phương pháp tốt nhất để gieo một ứng dụng Node/MongoDB là gì?

Những gì tôi đã cố gắng:

node-mongo-seed; Khá thẳng về phía trước, nhưng liên tục ném lỗi vào cuối mảng. (Có lẽ các module bson mất tích là có lỗi?)

{ [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; Cũng khá thẳng về phía trước, về cơ bản đặt các đối tượng JSON vào một biến trước khi xuất ra cơ sở dữ liệu. Đầy hứa hẹn, nhưng ... nhiều lỗi ...

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

Vì vậy, suy nghĩ của tôi là rằng nó có lẽ là một lỗi cú pháp trong cấu trúc JSON, nhưng chơi xung quanh với điều đó đã không mang lại bất kỳ giải pháp thực tế (hoặc có lẽ tôi đang thiếu nó?). Ví dụ về JSON của tôi:

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

Ngoài ra, tôi không hoàn toàn chắc chắn cách chỉ định subdocuments bên trong JSON (giả sử tôi có thể thực hiện quy trình gieo hạt để hoạt động chính xác ngay từ đầu).

Dưới đây là mô hình của tôi:

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

Bất kỳ cái nhìn sâu sắc về cách điều hướng những vấn đề này sẽ được đánh giá rất nhiều. Cảm ơn!

Trả lời

9

Bạn có thể cư MongoDB trong CLI bằng mongoimport

Nó sẽ tải một tệp JSON thành một quy định MongoDB Instance & Bộ sưu tập, tất cả bạn cần là một ví dụ mongod được chạy trước khi thực hiện.

Đây là số walkthrough sử dụng mongoimport.

+0

này chắc chắn đã giúp tôi thực hiện những gì tôi đang tìm cách, ít nhất là một phần. Tôi không chắc chắn (chưa) làm thế nào để sửa đổi quá trình để bao gồm subdocuments (rất có thể là 'mongodump'), nhưng đây là một bước tiến lớn trong đúng hướng. Cảm ơn bạn! – Antwisted

+0

Ý của bạn là gì khi bạn nói bao gồm các subdocuments? – peteb

+0

[Bài đăng này] (http://stackoverflow.com/questions/29354858/create-id-on-subdocuments-on-mongoimport-jsonarray) có thể hữu ích cho bạn về các phân mục có 'mongoimport' – peteb

1

Bạn JSON không chạy giản đồ của mình.

Fix JSON của bạn như thế này:

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

Bạn có thể sử dụng mongoose dữ liệu hạt để viết kịch bản hạt giống của riêng bạn mà tương tác mô hình mongoose của bạn với: https://github.com/sharvit/mongoose-data-seed

Các vấn đề liên quan