如何将 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 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

在 EJS 页面上从 mongoDB 访问数据

Mongodb更新与子文档匹配的子文档值并且不更改其他字段

如何使用MongoDB过滤子文档中的数组[重复]

如何从 mongodb 通过 Geowithin 获取匹配的子文档?

如何更新 MongoDB 中的子文档?

如何更新子文档mongodb