2017-12-19 5 views
0

Ich versuche geschachtelte JSON in Mungo-Dokument und Filialdokument zu konvertieren und Art nicht möglich, es zu tun. Ich habe viel im Web gesucht und konnte keine nützlichen finden.Konvertieren von JSON in Mongoose-Dokument (zusammen mit Unterdokument-Objekt)

Runkit-Link: https://runkit.com/codesnooker/5a391097232f800012605983

Hier ist mein Code:

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); 

Und ich bin immer die Ausgabe wie folgt: enter image description here

Aber ich möchte fbProfile auch bevölkert haben, so dass Ich brauche db nicht zu drücken, wenn ich es im Projekt verwende. Irgendeine Idee, wie man das macht?

Antwort

0

Wenn ein Schema eine Referenzeigenschaft zu einer anderen Sammlung hat, kann populate verwendet werden, um diesen Verweis auf das übergeordnete Dokument abzurufen und festzulegen.

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

Mit Mongo Abfrage ist es einfach. Ich möchte das nicht benutzen. Ich möchte es aus dem vorhandenen JSON konvertieren, der im RAM gespeichert ist. – codesnooker

+0

Zuerst, für Ihre eigene Erbauung, ** JSON ** ist ein String und kein Objekt, daher ist es die Abkürzung von ** J ** ava ** S ** cript ** O ** bject ** N ** otation. Was Sie haben, wird umgangssprachlich als ** POJO ** oder ** P ** bezeichnet ** O ** ld ** J ** Avascript ** O ** bject. Sie sind anders. :) Okay, bei Ihrem Beispiel sind die einzigen Daten in diesem Objekt eine ID für das 'fbProfile', auf das Sie zugreifen möchten. Wenn Sie das also nicht bereits im Speicher haben, müssen Sie es auf die eine oder andere Weise aus der Datenbank holen. Wenn Sie es bereits im Speicher haben, können Sie es in dieses Objekt zusammenführen, um die gleiche Ausgabe zu erstellen. –

+0

Ich habe bereits fbProfile Daten im Speicher. Ich möchte es nur in ein richtiges Mongoose-Dokument umwandeln – codesnooker