如何使用Mongoose将json导入MongoDB

我有一些问题,这是什么使棘手,所以…

我使用的是Mongoose和MongoLab,我可以存储数据并检索它,但是我想要一个允许我做数据库的基础种子的系统。

我有为集合创build的模式,但没有运行,因为没有数据,所以我似乎无法运行正常的mongoimport,因为集合尚未创build。

我想添加一些东西到我的节点服务器,以便如果集合不存在或是空的,它会加载一个集合的模式,然后插入json的种子数据。

所以我有这个…

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

我通常使用Club.find或Club.save等,这工作正常。

我想只针对需要创build的俱乐部集合运行一系列对象的保存。

我曾经研究过mongoose灯具,但是这个灯具已经有几年没有更新过了,可能还有一种方法可以做到这一点,而不需要额外的代码,因为我已经定义了模式,并且准备好了json数组。

这是我列出的成功事件,当我想我要做检查和导入。

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

另外,考虑一下,如果我想创build两个集合,并且为第一个集合中的项目生成ObjectId(),我可以想象要将第二个集合中的集合用作ref。

假设Club对象现在只有一个string属性。

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

任何帮助非常感谢

如果我理解的很好,你只需要从Mongoose上传一个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(); ... }) 

并从Mongo Shell中检查:

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

有时shell脚本可能会有帮助:

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

另请参阅: 从Windows文件夹使用mongoimport的MongoDB批量导入