如何将 MongoDB 子文档 _id 与 EJS 一起使用
Posted
技术标签:
【中文标题】如何将 MongoDB 子文档 _id 与 EJS 一起使用【英文标题】:How to use MongoDB Subdocument _id with EJS 【发布时间】:2021-10-29 12:25:27 【问题描述】:我正在尝试使用 Mongoose 从 MongoDB 获取子文档,然后将数据传递给 EJS 文档,但由于 _id
对象,我得到了 Uncaught SyntaxError: Invalid or unexpected token
。理想情况下,我希望 _id
是一个字符串,但使用 toString()
或 toHexString()
不起作用。
这是我的基本架构:
var hikeSessionSchema = new mongoose.Schema(
hike_name: type: String, required: true,
hike_date: type: String, required: true,
mileage: type: Number, required: true
)
var hikerSchema = new mongoose.Schema(
username: type: String, required: true,
log: [hikeSessionSchema]
)
var HikeSession = mongoose.model('HikeSession', hikeSessionSchema)
var Hiker = mongoose.model('Hiker', hikerSchema)
这是我的GET
请求:
app.set('view engine', 'ejs');
...
app.get('/users/:id/:hike', (req, res) =>
var id = req.params.id;
var hikeId = req.params.hike;
Hiker.findById(id, (err, hiker) =>
const hike = hiker.log.id(hikeId)
console.log(hike)
res.render('editHike', data: hike )
)
当我console.log(hike)
我得到:
_id: 6125629447cec024c067c1da,
hike_name: 'Hike Name',
hike_date: '2021-08-04',
mileage: 10
我尝试将_id
作为字符串保存到变量中,然后用变量替换_id
,但它又回到了一个对象。我也试过delete hike._id
,但也没用。
我需要能够在 EJS 文档中引用 _id
以供以后使用。也许有一种方法可以在没有_id
的情况下获取HikeSession
对象,然后单独保存_id
?我怎样才能使这项工作?谢谢
【问题讨论】:
【参考方案1】:我想出了一个解决方法,方法是复制没有_id
字段的对象,创建一个将_id
转换为字符串的变量,然后将该变量添加到新对象中。
app.get('/users/:id/:hike', (req, res) =>
var id = req.params.id;
var hikeId = req.params.hike;
Hiker.findById(id, (err, hiker) =>
var hikeData = hiker.log.id(hikeId)
var hike = (( hike_name, hike_date, mileage ) => ( hike_name, hike_date, mileage ))(hikeData);
var idStr = hikeData._id.toString()
hike.id = idStr;
res.render('editHike', data: hike )
)
然后像这样在 EJS 文件中导入:
var data = <%- JSON.stringify(data) %>;
可能有更好的方法来做到这一点,但这很有效。
【讨论】:
以上是关于如何将 MongoDB 子文档 _id 与 EJS 一起使用的主要内容,如果未能解决你的问题,请参考以下文章