嵌套的map()和find()在express+mongoose中不起作用,但在codesandbox中起作用



我在express中得到了一个路由,它从mongoDb中得到了两个不同的对象数组,然后返回一个新的"贡献";数组中添加一些数据之后;projectAll";

这里有一个贡献对象:

{
_id: "5f5b095f01ba8e40769f7301",
libId: "5f5a7a7701ba8e40769f72fb",
totalPaidAmount: 10000,
transactionId: "pi_1HQ4hVGmJhXXrXOXnr0pkXkv",
cart: [
{
_id: "5f5b095f01ba8e40769f7302",
amount: 5000,
projectId: "5f5b086601ba8e40769f72fe"
},
{
_id: "5f5b095f01ba8e40769f7303",
amount: 5000,
projectId: "5f5b08ae01ba8e40769f7300"
}
],
__v: 0
}

和一个项目所有对象:

{
projectCover: { id: "211290" },
title: "My title 2",
funded: 11000,
description: "Desc",
_id: "5f5b08ae01ba8e40769f7300",
libId: "5f5a7a7701ba8e40769f72fb",
__v: 0
}

我需要将projectAll.title和projectAll.projectCover添加到每个contributions.cart对象中。为此,我将contribution.cart.projectId与projectAll进行匹配_id。

router.get("/contributions/:id", async (req, res) => {
const id = req.params.id

try {
const contributions = await Contribution.find({id})
const projectAll = await Project.find({id})
const updatedContribution = contributions.map((contribution) => {
// Go through each cart of each contribution
const updatedCart = contribution.cart.map((cartItem) => {
// Find matching project
const matchingProject = projectAll.find((project) => {
// project OK =====>  console.log(project)
// projectAll OK =====>  console.log(projectAll)
// cartItem OK =====>  console.log(cartItem)
return project._id === cartItem.projectId;
});
// Here return undefined =====>  console.log(matchingProject)
const {projectCover, title} = matchingProject
return {...cartItem, projectCover, title
}
})
return { ...contribution, cart: updatedCart
}
})
res.send(updatedContribution)
} catch (err) {
res.status(500).send(err)
}

此代码在我的codeSandBox中运行良好:https://codesandbox.io/s/contribution-map-projects-vhv8z?file=/src/index.js

但在我的express+mongoose环境中,我对matchingProject没有定义(我在代码中添加了注释,以显示我从哪里得到不想要的结果(

有人知道为什么它不起作用吗?非常感谢!

EDIT:console.log(typeof project_id,typeof cartItem.projectId(返回对象而在codesandbox中,这些是字符串。

因为它们都是ObjectId,所以可以使用mongoose equals((函数-所以project._id.equals(cartItem.projectId)。你不能比较它们,因为你会比较它们的对象引用。因此,上述功能或project._id.toString() === cartItem.projectId.toString()都可以工作

相关内容

最新更新