如何使用嵌入模式的express在猫鼬中传递多个复杂查询以将其呈现为我的ejs文件

Posted

技术标签:

【中文标题】如何使用嵌入模式的express在猫鼬中传递多个复杂查询以将其呈现为我的ejs文件【英文标题】:How to pass in multiple complex query in mongoose using express where the schema's are embedded to render it my ejs file 【发布时间】:2020-10-06 16:02:30 【问题描述】:
//GET /teams/:id/players/:playerId     --> single team --> getting single player
module.exports.getPlayer = (req, res, next) => 
    TeamModel.findOne( _id: req.params.id , (err, result) => 
        console.log('Result: ' + result.players);
        // let player = _.where(result.players,  id: req.params.playerId )
        res.render('playerDetails', 
            title: 'Player Details',
            playerDetails: result
        )
    )
;

因为 req.params.id 在 /player/:playerId 之前为我生成了 id 我想要一些可以帮助我获得 id 并最终得到 :playerId 的东西

我想传递我的“playerDetails”文件。

<td>
<%=playerDetails.players[1].playerName%>
</td>

我在我的 ejs 文件中的代码在上面,这是一个硬编码值,用于生成玩家名称。

但我只是不知道如何从我的 getPlayer 控制器传递特定的 :playerId,我不必硬编码值以在我的 ejs 文件中列出播放器名称。

我该怎么办? 谢谢。

【问题讨论】:

没关系解决它。 【参考方案1】:

我的控制器功能:

//GET /teams/:id/players/:playerId     --> single team --> getting single player
module.exports.getPlayer = (req, res, next) => 
    TeamModel.findOne( _id: req.params.id , (err, result) => 
        res.render('playerDetails', 
            title: 'Player Detail',
            playerDetails: result,
            playerId: req.params.playerId
        )
    );
;

我的 ejs 模板:

<tbody>
        <!-- since both the _id are objects their memory address are unique, I had to convert it to string to compare-->
        <% for(let i= 0; i < playerDetails.players.length; i++) %>
        <%if(JSON.stringify(playerDetails.players[i]._id) === JSON.stringify(playerId))%>
        <tr>
            <td><%=playerDetails.players[i].playerName%></td>
            <td><%=playerDetails.players[i].age%></td>
            <td><%=playerDetails.players[i].jerseyNum%></td>
        </tr>
        <%  %>
        <%  %>
    </tbody>

所以我所做的是在我的getPlayer 控制器函数中传递了一个名为playerId 的单独键,该键将在playerDetails.ejs 中接收。我通过了它,以便我可以检查与单个玩家匹配的确切 ID。

我做得不好的主要事情是将对象转换为字符串。由于对象具有不同的内存地址,因此它们永远不会彼此相等,因此不会在页面上显示任何内容。 这就是我使用JSON.stringify()._id 转换为字符串的原因。

【讨论】:

以上是关于如何使用嵌入模式的express在猫鼬中传递多个复杂查询以将其呈现为我的ejs文件的主要内容,如果未能解决你的问题,请参考以下文章

在猫鼬中仅更改整个嵌入式文档数组的一个字段

如何使用猫鼬需要验证在猫鼬中插入多个文档?

在猫鼬中使用 geoNear

在猫鼬中发布嵌套模型

如何在猫鼬中更新嵌套数组值

如何在猫鼬中查询多个集合