Как импортировать json в MongoDB с помощью Мангуста

у меня есть несколько проблем с этим, что то, что делает его сложным, так...

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

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

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

Так у меня есть это...

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

Я обычно использую клуба.найти или клуб.сохраните etc, это работает нормально.

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

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

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

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

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

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

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

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

2 ответов


если я хорошо понимаю, все, что вам нужно, это загрузить документ JSON в вашу коллекцию MongoDB из Mongoose. Учитывая, что ваша модель называется Club, вы можете получить доступ к методам raw driver через 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();
... })

и проверьте из оболочки Mongo:

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

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

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

Читайте также: массовый импорт MongoDB с помощью mongoimport из папки Windows