2016-10-13 1 views
0

Also, ich habe ein bekam ein Schema:Mongoose Schema nicht Konvertieren von Daten richtig

import mongoose from 'mongoose'; 
import cuid from 'cuid'; 
import timestamps from 'mongoose-timestamp'; 
import validators from 'mongoose-validators'; 

const Schema = mongoose.Schema; 

const userSchema = new Schema({ 
    auth0id: { type: 'String', required: true }, 
    cuid: { type: 'String', default: cuid(), required: true }, 
    dateAdded: { type: 'Date', default: Date.now, required: true }, 
    email: { type: 'String', required: true, validate: validators.isEmail() }, 
    avatarURL: { type: 'String', required: true, validate: validators.isURL() }, 
    username: { type: 'String' }, 
    accessLevel: { type: 'Number', required: true }, 
    entities: [{ type: 'String', required: true }], 
    preferredEntity: { type: 'String', required: true }, 
    tab_access: [{ 
    entityid: { type: 'String', required: true }, 
    tabs: [{ type: 'String' }], 
    }], 
    departments: [{ 
    entitytid: { type: 'String', required: true }, 
    deptid: { type: 'String', required: true }, 
    }], 
}); 

userSchema.plugin(timestamps); 

export default mongoose.model('User', userSchema); 

und ich habe einige Daten, die ich bearbeitet habe:

{ 
    email: '[email protected]', 
    username: 'Fred Bloggs', 
    accessLevel: 5, 
    entities: ['cit98hg1j000578jcffur7c6h'], 
    auth0id: 'auth0|57ff79140dd70f9616b80a9d', 
    avatarURL: 'https://s.gravatar.com/avatar/2dfc6cb16eea798886af841e7b1ee8ab?s=480&r=pg&d=https%3A%2F%2Fcdn.auth0.com%2Favatars%2Ffb.png', 
    preferredEntity: 'cit98hg1j000578jcffur7c6h', 
    departments: [{ 
     entityid: 'cit98hg1j000578jcffur7c6h', 
     deptid: 'cit98hg1j000572jcffur7c6h' 
    }], 
    tabAccess: [{ 
     entityid: 'cit98hg1j000578jcffur7c6h', 
     tabs: [] 
    }] 
} 

Als ich ein erstellen neues Modell:

const mongoUser = new User(userData); 

... ist die Daten nicht das gleiche (NB an dieser Stelle nicht gespeichert):

{ 
    email: '[email protected]', 
    username: 'Fred Bloggs', 
    accessLevel: 5, 
    auth0id: 'auth0|57ff79140dd70f9616b80a9d', 
    avatarURL: 'https://s.gravatar.com/avatar/2dfc6cb16eea798886af841e7b1ee8ab?s=480&r=pg&d=https%3A%2F%2Fcdn.auth0.com%2Favatars%2Ffb.png', 
    preferredEntity: 'cit98hg1j000578jcffur7c6h', 
    _id: 57 ff791473da244be87f0489, 
    departments: [{ 
     deptid: 'cit98hg1j000572jcffur7c6h', 
     _id: 57 ff791473da244be87f048a 
    }], 
    tab_access: [], 
    entities: ['cit98hg1j000578jcffur7c6h'], 
    dateAdded: Thu Oct 13 2016 13: 07: 48 GMT + 0100(BST), 
    cuid: 'ciu8aq0430000k7jck2zsi5zm' 
} 

Es Fehler, wenn es:

  1. wischt die tab_access Daten
  2. die entityid von Abteilungen Entfernt und ersetzt sie durch _id

Weiß jemand, warum ?? Jede mögliche Hilfe würde sehr geschätzt werden ...

**** EDIT ****

Also, einfach klar zu sein, meine Route Handler sieht wie folgt aus:

export function addUser(req, res) { 
    const sentUser = req.body.user; 
    console.log('sentUser', sentUser); 
    const newUser = { 
    connection: process.env.AUTH0_DB_CONNECTION, 
    password: process.env.AUTH0_DEFAULT_PASSWORD, 
    username: sentUser.username, 
    nickname: sentUser.username, 
    email: sentUser.email, 
    email_verified: false, 
    app_metadata: { 
     accessLevel: sentUser.accessLevel, 
    }, 
    }; 
    console.log('newUser', newUser); 
    management.createUser(newUser).then(user => { 
    console.log('user returned on auth0 creation: ', user); 
    const storedUser = { ...req.body.user }; 
    console.log('storedUser pre', storedUser); 
    storedUser.auth0id = user.user_id; 
    storedUser.avatarURL = user.picture; 
    storedUser.preferredEntity = storedUser.entities[0].entityid; 
    storedUser.departments = storedUser.entities.map((ent) => { 
     return { 
     entityid: ent.entityid, 
     deptid: ent.deptid, 
     }; 
    }); 
    storedUser.tabAccess = storedUser.entities.map((ent) => { 
     return { 
     entityid: ent.entityid, 
     tabs: [], 
     }; 
    }); 
    storedUser.entities = storedUser.entities.map((ent) => { 
     return ent.entityid; 
    }); 
    console.log('storedUser post', storedUser); 
    const mongoUser = new User(storedUser); 
    console.log('mongoUser', mongoUser); 
    mongoUser.save((err, saved) => { 
     if (err) { 
     console.log('problem saving', err); 
     return res.status(500).send(err); 
     } 
     return res.status(201).send({ user: saved }); 
    }); 
    }).catch(err => { 
    console.log('problem saving to Auth0') 
    return res.status(500).send(err); 
    }); 
} 

wo management ist der Auto0-Verwaltungsclient. Ich ordne die Daten um, um storedUser zu bilden, und dann mache ich ein neues Modell, indem ich diese Daten in new User(storedUser) übergebe und versuche, das Modell zu speichern. Bevor ich das Modell speicherte, loggte ich ab, was produziert worden war und sah die oben erwähnten Probleme.

Die zwei Objekte, die ich zeige, sind die storedUser (Post) und die mongoUser, die es produziert.

+0

Können Sie die Frage bearbeiten und die Abfrage hinzufügen, die Sie ausführen, um das Dokument einzufügen? –

+0

@Svabael In diesem Stadium habe ich es nicht in Mongo gespeichert. Ich mache 'mongoUser.save()' next ... – user1775718

+0

Die mongoUser.save speichert das Dokument in Mongo –

Antwort

0

Grund ist falsch Schlüsselname:

departments: [{ 
    entitytid: // change it in schema to "entityid" 

Mitteilung der Schreibweise " entitytid ". es sollte "entityid" sein.

Zweitens, tab_access and tabAccess. Sie haben tab_access im Schema, aber Sie übergeben tabAccess zum Zeitpunkt der Erstellung des Objekts.

korrigieren Sie diesen Schlüssel, während Sie "storedUser" erstellen.

+1

Danke @Sachin, tut mir leid, es war so eine einfache Sache. :( – user1775718

+0

Irgendwann passiert es !!! :) – Sachin

0

Ich habe ein Gefühl, ohne 100% sicher zu sein, dass Sie das Schema so definieren:

import mongoose from 'mongoose'; 
import cuid from 'cuid'; 
import timestamps from 'mongoose-timestamp'; 
import validators from 'mongoose-validators'; 

const Schema = mongoose.Schema; 

const tabAccessSchema = new Schema({ 
    entityid: { type: 'String', required: true }, 
    tabs: [{ type: 'String' }], 
}); 

const departmentsSchema = new Schema({ 
    entitytid: { type: 'String', required: true }, 
    deptid: { type: 'String', required: true }, 
}); 

const userSchema = new Schema({ 
    auth0id: { type: 'String', required: true }, 
    cuid: { type: 'String', default: cuid(), required: true }, 
    dateAdded: { type: 'Date', default: Date.now, required: true }, 
    email: { type: 'String', required: true, validate: validators.isEmail() }, 
    avatarURL: { type: 'String', required: true, validate: validators.isURL() }, 
    username: { type: 'String' }, 
    accessLevel: { type: 'Number', required: true }, 
    entities: [{ type: 'String', required: true }], 
    preferredEntity: { type: 'String', required: true }, 
    tab_access: [tabAccessSchema], 
    departments: [departmentsSchema], 
}); 

userSchema.plugin(timestamps); 

export default mongoose.model('User', userSchema);