2017-12-19 10 views
0

ネストされたJSONをmongoose文書とサブ文書に変換しようとしています。私はウェブをたくさん検索していて、役に立たなかった。JSONをMongoose文書に変換する(サブ文書オブジェクトと共に)

は、runkitリンク:ここhttps://runkit.com/codesnooker/5a391097232f800012605983

が私のコードです:

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema 

const FbProfileSchema = new Schema({ 
    fb_id: { 
     type: String, 
     required: true, 
     index: { 
      unique: true 
     } 
    }, 
    first_name: String, 
    last_name: String, 
}, { 
    toJSON: { 
     transform: function (doc, ret) { 
      var key = ret._id.toHexString(); 
      delete ret._id; 
      ret._id = key; 
     } 
    } 
}); 

const UserModel = new Schema({ 
    email: { 
     type: String, 
     required: true, 
     index: { 
      unique: true 
     } 
    }, 
    fbProfile: { 
     type: Schema.ObjectId, 
     ref: FbProfileSchema 
    }, 
}); 

var FbProfile = mongoose.model('FbProfile', FbProfileSchema); 
var User = mongoose.model('User', UserModel); 

var json = "{\"fbProfile\":{\"_id\":\"5a38f1aff8920ebf2b098f40\",\"last_name\":\"My Last Name\",\"first_name\":\"My First Name\",\"fb_id\":\"temp_fb_id\",\"__v\":0},\"email\":\"[email protected]\",\"__v\":0,\"_id\":\"5a38f1aff8920ebf2b098f41\"}"; 

var userJSON = JSON.parse(json); 
var user = new User(userJSON); 

そして、次のように私は、出力を取得しています: enter image description here

をしかし、私はそのようfbProfileも投入されているしたいと思います私はプロジェクトでそれを使用するときにdbを押す必要はありません。どのようにそうするのか?

答えて

0

スキーマに別のコレクションへの参照プロパティがある場合は、populateを使用して、その参照を親ドキュメントにフェッチして設定できます。

User.findOne({ 
    email: '[email protected]' 
}).populate('fbProfile').exec().then(/* do something */); 
+0

mongoクエリを使用すると簡単です。私はそれを使用したくない。私はRAMに格納されている既存のJSONから変換したいです。 – codesnooker

+0

最初に、あなた自身の啓蒙のために、** JSON **は文字列でありオブジェクトではないので、** J ** ava ** S ** cript ** O ** bject ** N ** otationの略です。あなたが持っているものは、** POJO **または** P ** Lain ** O ** ld ** J ** avascript ** O ** bjectと口語的に呼ばれます。それらは違う。 :)あなたの例では、そのオブジェクトの唯一のデータはアクセスしたい 'fbProfile'のIDです。だから、あなたが既にメモリにそれを持っていなければ、あなたはそれをDBから一方向に取り出す必要があります。すでにメモリに格納されている場合は、このオブジェクトにマージして同じ出力を作成することができます。 –

+0

私はすでにfbProfileデータをメモリに持っています。それを右のMongoose文書に変換したい – codesnooker

関連する問題