2017-08-18 9 views
0
import * as mongoose from 'mongoose'; 
mongoose.connect('mongodb://localhost:27017/TestThis'); 
const db = mongoose.connection; 

db.on('error', console.error.bind(console, 'connection error:')); 
db.once('open', async() => { 
    const userRoles = new mongoose.Schema({ 
     roleName: String, 
     user: {type: mongoose.Schema.Types.ObjectId, ref: 'User'} 
    }); 
    const UserRoleModel = mongoose.model('UserRole', userRoles, 'UserRole'); 

    const userSchema = new mongoose.Schema({ 
     name: String, 
     roles: [{type: mongoose.Schema.Types.ObjectId, ref: 'UserRole'}] 
    }); 
    const UserModel = mongoose.model('User', userSchema, 'User'); 

    await UserModel.remove({}); 
    await UserRoleModel.remove({}); 

    const user = new UserModel({ 
     name: 'User1' 
    }); 

    const savedUser = await user.save(); 

    const role = new UserRoleModel({ 
     roleName: 'Test', 
     user: savedUser._id 
    }); 

    await role.save(); 

    const users = await UserModel.find().populate('roles').exec(); 
    // Does not populate roles 
    console.log('Users', users); 

    const roles = await UserRoleModel.find().populate('user').exec(); 
    // Populates the user 
    console.log('Roles', roles); 

    process.exit(); 
}); 

すべてのロールを取得すると、ユーザーを作成できます。しかし、ユーザーに属するすべてのロールを取得することはできません。Mongoose:ObjectId配列が設定されていません

あなたはmongoを実行していて、それをES5に移植している限り、コードを実行できるはずです。

私が間違っていることを誰も見ることができますか?

+0

[Multiple populate-mongoosejs](https://stackoverflow.com/questions/12821596/multiple-populates-mongoosejs)の可能な複製 – dnickless

+0

送信したリンクは、配列を使用していません。 – Buzzyboy

答えて

0

(コーディと一緒に取り組んでイム)の問題は、我々はユーザーモデルでの役割のIDを格納していなかったということでした。 PopulateメソッドがUserモデル_idを使用してUserRoleをフェッチすると誤って想定していました。そうではありません。 roles配列にUserRole IDを追加することで、入力されたデータが処理されます。

関連する問題