2015-06-07 2 views
7

У меня есть несколько проблем с этим, которое Что делает его сложным, поэтому ...Как импортировать JSON в MongoDB используя Mongoose

Я использую Мангуст и MongoLab, я могу хранить данные и получить его просто отлично , но я хочу систему, которая позволяет мне делать базовое семя базы данных.

У меня есть схемы, созданные для коллекций, но ни один из них не запускается, потому что нет данных, поэтому я не могу запустить обычный mongoimport, поскольку коллекция еще не создана.

Я хочу что-то добавить к моему серверу узлов, чтобы, если коллекция не существует или пуста, она загружает схему для коллекции и затем вставляет json для данных семени.

поэтому у меня есть это ...

var Club = require('./schemas/Club'); 

Я обычно использую Club.find или Club.save и т.д., то будет работать отлично.

Я хочу просто запустить сохранение против массива объектов в коллекцию Клуба, которые он должен создать.

Я изучал прибор мангуста, но его не обновляли годами, и, вероятно, есть способ сделать это, не требуя так много дополнительного кода, как я определил схему, и массив json ready.

Это событие успеха, которое я перечислил, когда я предполагаю, что хочу выполнить проверку и импорт.

mongoose.connection.on('open', function() { 
    console.log('mongoose.connection.opened'); 
}); 

Кроме того, чтобы рассмотреть, если бы я хотел создать две коллекции, и, когда он генерирует ObjectId() для элементов в первой коллекции, я могу себе представить, желая использовать их во второй коллекции как исх ,

Просто предположим, что объекты клуба имеют только одно свойство строки.

// contents of data/club.json 
[ 
    { 'name' : 'Barcelona' }, 
    { 'name' : 'Real Madrid' }, 
    { 'name' : 'Valencia' } 
] 

Любая помощь очень ценится

ответ

9

Если я понимаю, это хорошо, все, что вам нужно, это загрузить документ в формате JSON в коллекцию MongoDB от Мангуста. Учитывая, что ваша модель имеет имя Club, вы можете получить доступ к необработанным методам драйвера через Club.collection. И используйте insertMany для достижения того, чего вы хотите.

Вот одна позиция пример (интересный материал в конце):

> var mongoose = require('mongoose') 
> var assert = require('assert') 

> mongoose.connect('mongodb://localhost/test'); 

> var Schema = mongoose.Schema 
> var clubSchema = new Schema({ 
... name: String, 
... }) 

> var Club = mongoose.model('Club', clubSchema) 

// Now, the interesting part: 
> data = [ 
... { 'name' : 'Barcelona' }, 
... { 'name' : 'Real Madrid' }, 
... { 'name' : 'Valencia' } 
... ] 
> Club.collection.insertMany(data, function(err,r) { 
...  assert.equal(null, err); 
...  assert.equal(3, r.insertedCount); 
... 
...  db.close(); 
... }) 

И проверить из Монго Shell:

> db.clubs.find() 
{ "_id" : ObjectId("5574b464b680174d79e37601"), "name" : "Barcelona" } 
{ "_id" : ObjectId("5574b464b680174d79e37602"), "name" : "Real Madrid" } 
{ "_id" : ObjectId("5574b464b680174d79e37603"), "name" : "Valencia" } 
0

Иногда оболочки скрипты могут помочь:

for filename in *; do mongoimport -d mydb -c $filename --jsonArray done 

См. Также: MongoDB Bulk import using mongoimport from Windows folder

+0

Проблема, с которой мы столкнулись с использованием mongoimport, состояла в том, что мы только подтвердили наши данные с помощью адаптера mongoose, и это обходит это. Таким образом, мы должны были проверить, имеют ли все поля в json правильный формат и т. Д. Или строят в валидации в нашей схеме mongodb. – IroNEDR

+0

Этот комментарий не может помочь вашей ситуации. :( – sstruct

Смежные вопросы