猫鼬协会在ngFor中打印

时间:2018-12-18 12:30:11

标签: angular mongoose associations mongoose-schema mongoose-populate

我有这个user.js模型

const userSchema = new Schema({

    name: String,
    ...
    skills: [{
        type: Schema.Types.ObjectId,
        ref: 'skill'
    }]
})

和skill.js模型

const skillSchema = new Schema({
     name: String,
     user: {
         type: Schema.Types.ObjectId,
         ref: 'user'
     },
})

当我在Angular中获得所有用户时,在html中我这样做:

<div *ngFor="let user of arrUsers">
     ...
     <span *ngFor="let skill of user.skills">
           ******{{PRINT skill name}}******
     </span  

</div>

mlab中的用户是这样的:

{
    "name": "a user name"
    "skills": [
        {
            "$oid": "5c17a4269ef5b511ece55446"
        }
    ],
}

和技能:

{
    "_id": {
        "$oid": "5c17a4269ef5b511ece55446"
    },
    "name": "JAVA",
    "user": {
        "$oid": "5bf44809a15006343bc95718"
    },
    "__v": 0
}

在用户控制器中,我得到这样的用户:

findAll: (req, res) => {
    User.find()
        .then(users => {
            res.json(users);
        }).catch(err => {
            res.status(500).send({
                msg: err.message
            });
        });
},

和arrUsers控制台中用户的技能数组记录以下内容:

  

...   技能:Array(3)

     

0:“ 5c18dd0084a030698e17cd40”

     

1:“ 5c18dd0384a030698e17cd42”

     

2:“ 5c18dd0584a030698e17cd43”   ...

我应该以某种方式填充findAll的技能吗?

打印技能名称的最佳方法是什么?

解决方案

  

我必须在控制器中执行User.find()。populate('skills')

感谢Zlatko的回答

3 个答案:

答案 0 :(得分:0)

仅打印skill.name

<span *ngFor="let skill of user.skills">
       {{skill.name}}
 </span  

答案 1 :(得分:0)

这只是简单的绑定,像这样使用您的代码-

 <span *ngFor="let skill of user.skills">
   {{skill?.name}}   //Here skill is your object contains data having keys name and user
 </span>

PS:为了始终进行调试,最好像这样在模板端使用json管道-

{{skill | json}}

答案 2 :(得分:0)

您需要填充查询技巧。

类似的东西:

db.users.get(query).populate('skills')

然后应填充您的技能数组。