如何从另一个模式中获取特定的键值,通过比较它们是不是具有相同的键值?

Posted

技术标签:

【中文标题】如何从另一个模式中获取特定的键值,通过比较它们是不是具有相同的键值?【英文标题】:How can I get a specific key value from another schema, By comparing if they have same key value?如何从另一个模式中获取特定的键值,通过比较它们是否具有相同的键值? 【发布时间】:2021-06-14 20:13:39 【问题描述】:

我有 Node.js 应用程序,由 express 提供服务,我有两个不同的猫鼬模式 userModel 和 postMode,我的前端是用 React.js 制作的。我正在创建一个将创建和显示帖子的组件。显示帖子将包含用户名、头像、日期、文本和图像。问题是头像在 userModel 中。有没有办法我也可以显示另一个模式的头像?我想我会根据它们是否具有相同的键值来比较这两个模式,因为它们都有用户名。为了显示帖子,我发送 Axios 以获取基于 postModel 的请求。

Backend
export const getUserRelatedPost = asyncHandler(async (req, res) => 
  const postData = await postModel.find();
  res.json(postData);
);

架构 后模型

用户模型

谢谢!

【问题讨论】:

我不完全确定我理解您的要求,但在查看您共享的两个架构时,用户名元素中的值不匹配。 我认为更好的方法是在您的帖子中嵌入用户数据或创建一个引用(然后填充)到 UserModel。当您创建新帖子时,您可以限制您提出的请求数量。 @ScottGnile 我很抱歉,但这两个用户名都应该是 johndoe。我想要的输出是我想从 userModel 获取头像值,以便我可以在我的帖子组件上使用它,但问题是 postModel 是我在帖子组件上使用的那个。 @VoQuocThang 先生,你能给我一些关于如何做到这一点的链接吗?谢谢! @rjc30 这里是填充方法:***.com/questions/38051977/… 【参考方案1】:

你可以使用猫鼬的填充功能

https://mongoosejs.com/docs/populate.html

在您的 postModel 中添加一个虚拟“用户”元素

const postSchema = Schema(
    //your existing postModel definition

);

postSchema.virtual('user', 
    ref: 'User',
    localField: 'username',
    foreignField: 'username',
    justOne: true
);

我假设您的 userModel 导出用户是这样的:

const userSchema = Schema(
    //your existing userModel definition
)

const User = model('User', userSchema);

那么在你的快递路线中,你应该能够做这样的事情:

export const getUserRelatedPost = asyncHandler(async (req, res) => 
    const postData = await postModel.find()
        .populate(
            path: 'user',
            select: 'avatarPhoto'
        );
    //you should be able to access the avatar photo(s) like this
    console.log(postData.map(u => u.user.avatarPhoto)

    res.json(postData);
);

【讨论】:

这假设两个模型中用户名中的值是相同的 感谢您的帮助! 如果我使用 .find 会出现问题,avatarPhoto 未定义,但如果我使用 .findOne,它会起作用。 没错,find 返回的是一个数组,而不是一条记录……我的错。 是的,我仍在寻找解决此问题的方法。感谢您的帮助!

以上是关于如何从另一个模式中获取特定的键值,通过比较它们是不是具有相同的键值?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 JSON 对象中获取特定的键值

我如何从 swift4 中的字符串中获取特定的键值

获取值的键而不是获取键值? [复制]

从另一个字典更改子字典的键值 - Python

如何获取自己键盘上按键的键值(KeyCode)

通过Value获取Map中的键值Key的四种方法