2015-06-07 107 views
7

我有這幾個問題,這是什麼使得它非常棘手,所以導入JSON到MongoDB中......如何使用貓鼬

我使用的貓鼬和MongoLab,我可以將數據存儲和檢索它只是罰款,但我想要一個允許我做數據庫的基礎種子的系統。

我有爲集合創建的模式,但沒有運行,因爲沒有數據,所以我似乎無法運行正常的mongoimport,因爲集合尚未創建。

我想添加一些東西到我的節點服務器,以便如果集合不存在或爲空,它將加載一個集合的模式,然後插入json的種子數據。

所以我有這個...

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

我通常使用Club.find,或Club.save等,這就是工作的罰款。

我想針對需要創建的Club對象集合運行一個對象數組的保存。

我看過貓鼬燈具,但它沒有多年更新過,可能有這樣做的方法,無需額外的代碼,因爲我已經定義了模式,並且準備好了json數組。

這是我列出的成功事件,當我想我想要做檢查和導入。

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

而且,要考慮,如果我想創建兩個集合,當它產生的ObjectId()第一個集合中的項目,我可以想像想使用這些第二集合中作爲ref 。

假設Club對象現在只有一個字符串屬性。

// 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(); 
... }) 

而且從蒙戈殼牌檢查:

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

有時shell腳本可以幫助:

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

另請參閱:MongoDB Bulk import using mongoimport from Windows folder

+0

我們使用mongoimport遇到的問題是我們只通過貓鼬適配器驗證了我們的數據,並繞過了這一點。所以我們必須檢查json中的所有字段是否具有正確的格式等,或者在驗證中構建到我們的mongodb模式中 – IroNEDR

+0

此評論無法幫助您解決問題。 :( – sstruct