2016-10-13 1 views
0

データを変換しないで、私は、スキーマ持っている:マングーススキーマだからきちんと

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

をし、私は私が処理されてきたいくつかのデータ持っている:私は作成すると

{ 
    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: [] 
    }] 
} 

を新しいモデル:

const mongoUser = new User(userData); 

...データは(NBこの時点で保存されていない)と同じではありません。

{ 
    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' 
} 

それフォルトその際:

  1. は部署からentityidを削除し、_id

に置き換えて、誰もがなぜ知っているか?tab_accessデータをワイプすべてのヘルプは本当にいただければ幸いです...

**** **** EDIT

だから、ちょうど明確にすることが、私のルートハンドラは次のようになります。

managementがある
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); 
    }); 
} 

auto0管理クライアント。データを並べ替えてstoredUserとし、そのデータをnew User(storedUser)に渡して新しいモデルを作成し、モデルを保存しようとします。モデルを保存する前に、私は生産されたものをログアウトし、上記の問題を見た。

私が示す2つのオブジェクトは、storedUser(投稿)とそれが生成するmongoUserです。

+0

質問を編集し、ドキュメントを挿入するために実行するクエリを追加できますか? –

+0

@Svabaelこの段階では、私はそれをmongoに保存していません。私は 'mongoUser.save()'を次に実行します... – user1775718

+0

mongoUser.saveは文書をmongoに保存します –

答えて

0

理由は、間違ったキー名ですエンティティテッド "。それは "entityid"でなければなりません。

第2、tab_access and tabAccess。スキーマにtab_accessがありますが、オブジェクトの作成時にtabAccessを渡しています。

"storedUser"を作成する際にこのキーを修正してください。

+1

ありがとう@Sachin、申し訳ありません、それはそのような基本的なものでした。 :( – user1775718

+0

いつかは起こる!!! :) – Sachin

0

私はあなたがそのようなスキーマを定義する必要があることは100%確実せず、意味を持っている:

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

通知」の綴り:

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); 
関連する問題