首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在EJS中使用MongoDB Subdocument _id

如何在EJS中使用MongoDB Subdocument _id
EN

Stack Overflow用户
提问于 2021-08-30 19:27:35
回答 1查看 83关注 0票数 0

我试图使用Mongoose从MongoDB获取一个子文档,然后将数据传递给一个EJS文档,但由于_id对象,我得到了一个Uncaught SyntaxError: Invalid or unexpected token。理想情况下,我希望_id是一个字符串,但是使用toString()toHexString()不起作用。

以下是我的基本模式:

代码语言:javascript
复制
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请求:

代码语言:javascript
复制
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)时,我会得到:

代码语言:javascript
复制
{
  _id: 6125629447cec024c067c1da,
  hike_name: 'Hike Name',
  hike_date: '2021-08-04',
  mileage: 10
}

我尝试将_id作为字符串保存到一个变量中,然后用该变量替换_id,但它返回到一个对象。我也尝试过delete hike._id,但也不起作用。

我需要能够在EJS文档中引用_id供以后使用。也许有一种方法可以在不使用_id的情况下获取HikeSession对象,然后单独保存_id?我怎么才能让它工作呢?谢谢

EN

回答 1

Stack Overflow用户

发布于 2021-08-30 21:26:28

我想出了一个变通方法,复制没有_id字段的对象,创建一个将_id转换为字符串的变量,然后将该变量添加到新对象中。

代码语言:javascript
复制
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文件,如下所示:

代码语言:javascript
复制
var data = <%- JSON.stringify(data) %>;

也许有一种更好的方法可以做到这一点,但这个方法奏效了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68989396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档