Mongoose 关联在 ngFor 中打印

Posted

技术标签:

【中文标题】Mongoose 关联在 ngFor 中打印【英文标题】:Mongoose associations print in ngFor 【发布时间】:2019-05-18 20:56:28 【问题描述】:

我有这个 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 控制台中用户的技能数组记录了以下内容:

... 技能:数组(3)

0: "5c18dd0084a030698e17cd40"

1:“5c18dd0384a030698e17cd42”

2: "5c18dd0584a030698e17cd43" ...

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

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

解决方案

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

感谢 Zlatko 的回答

【问题讨论】:

请发arrUsers 【参考方案1】:

只需打印skill.name

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

【讨论】:

【参考方案2】:

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

 <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

【讨论】:

嘿pardeep!感谢您的回答!当我做管道时,它只会打印技能的_id。技能名称未定义。也许我应该发布更多代码? 是的,最好发布您的回复。您的对象中必须有名称为 name 的键 我想我做了所有需要的编辑,谢谢你的努力【参考方案3】:

您需要填充查询它的技能。

类似:

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

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

【讨论】:

感谢兹拉特科!我必须在我的控制器中填充

以上是关于Mongoose 关联在 ngFor 中打印的主要内容,如果未能解决你的问题,请参考以下文章

Graphql 结果不使用猫鼬填充关联类型的结果

ngFor - 按索引打印数组项

没有架构的猫鼬读取

Mongoose基于MongoDB建模并设置关联

Egg中使用Mongoose实现数据库表的关联查询

如何在 mongodb 和 mongoose 模型中使用 cloudinary