2017-04-20 9 views
0

私はmongo/mongooseを学習しようとしていて、mongodbにjsonをインポートしています。mongoose - jsonオブジェクトをスキーマにマッピング

私のJSONは、フォームのオブジェクトの数が含まれています

{ 
    "FIELD1": "28/02/2017", 
    "FIELD2": "string value", 
    "FIELD3": "100" 
}, 
{ 
    "FIELD1": "28/02/2017", 
    "FIELD2": "string", 
    "FIELD3": "57" 
}, 

私はスキーマを持っている:

var statementSchema = new Schema({ 
    //date: {type:Date, required: true}, 
    //name : {type:String, required:true}, 
    //amount: {type: Number, required:true} 
    FIELD1 : {type:String, required:true}, 
    FIELD2: {type:String, required:true}, 
    FIELD3: {type:String, required:true} 
}); 

あなたがより多くのことを私は本当にDBのキーたいことがわかりますソースjsonに含まれている値よりも、その値が記述されています(つまり、jsonのFIELD1がDBのdateであることが望ましいです)。

これを行うにはどのような方法が最適ですか?私はmongoose-aliasfieldを見たことがありますか、それは最善のアプローチですか、それともFIELD1を定義するデフォルトの方法ですか?as someothernameはスキーマですか?

FIELD1とFIELD3をそれぞれDateNumberとしてキャストする正しい方法は、jsonソースの現在のStringからどうなりますか? ;)

答えて

0

OKので、これは私が本当に初心者くさいされていました。

var statementSchema = new Schema({ 
date : {type:Date, required:true}, 
name: {type:String, required:true}, 
amount: {type:Number, required:true} 
}); 

をし、私が使用して挿入します:

スキーマが定義されました。このため

var statements= require('../data/convertcsv.json'); 
var Statement = require('../models/statement'); 
var mongoose = require('mongoose'); 
mongoose.connect('localhost:27017/statement'); 

var parseDate = require('../helpers/parseDate'); 


var done = 0; 
for(var i = 0; i < statements.length; i++) { 
var newStatement = new Statement(); 
//helper function breaks string apart, reassembles and returns a Date 
newStatement.date = parseDate.stringToDate(statements[i].FIELD1); 
newStatement.name = statements[i].FIELD2; 
newStatement.amount = Number(statements[i].FIELD3); 

newStatement.save(function(err, result){ 
    done++; 
    if(done === statements.length){ 
     exit(); 
    } 
}); 

} 

function exit(){ 
mongoose.disconnect(); 
}; 
0

このようにしてみてください。、ref Mongoose schema data type

スキーマ:

var statementSchema = new Schema({ 
    FIELD1 : {type:Date, required:true}, 
    FIELD2: {type:String, required:true}, 
    FIELD3: {type:Number, required:true} 
}); 

インサート:

db.getCollection('users').save({ 
    "FIELD1": Date("28/02/2017"), 
    "FIELD2": String("string"), 
    "FIELD3": Number("57") 
}) 

結果:

{ 
    "_id" : ObjectId("58f8ba663749f1f13fee40d6"), 
    "FIELD1" : "Thu Apr 20 2017 19:10:54 GMT+0530 (IST)", 
    "FIELD2" : "string", 
    "FIELD3" : 57.0 
} 
+0

感謝を。しかし、上記はフィールドが必要とするタイプを定義するだけではありませんか?その値を文字列として持つソースからインポートする場合、 'Date'などにもキャストされますか? –

+0

はい、それは私の更新された答えを見ることができます。ありがとう。 –

+0

ありがとう。そして、スキーマ定義に入力Jsonとは異なるキーを持つオプションに関しては、これは唯一の/最良のオプションですhttps://github.com/ramiel/mongoose-aliasfield –

関連する問題