Mongoose 在结果的 _id 字段中返回“new ObjectId”

Vpp*_*Man 5 mongoose mongodb node.js reactjs next.js

当我尝试查询时,结果包含_id带有“new ObjectId()”的字段。如何避免这种“new ObjectId()”并仅将哈希值包含为字符串。由于此问题,将数据作为 JSON 响应发送回失败。

下面是一个基本的demo:

我的查询代码:

book_data = await Book.find({ slug: 'test' }).
                        where('status').equals('Active').select('title').exec()

console.log( book_data )                    
Run Code Online (Sandbox Code Playgroud)

回复:

[
  {
    _id: new ObjectId("6164aff742da0eac31a87b9a"),
    title: 'Test' 
  }
]
Run Code Online (Sandbox Code Playgroud)

Mat*_*ich 3

您可以将选项对象传递给该.find方法。在那里,您可以通过提供 0 作为值来指定要忽略的字段。

请参阅此处了解更多信息。

像这样的事情应该可以解决问题:

book_data = await Book.find(
    { slug: 'test' }, // Query
    { _id: 0 }        // Options
).where('status').equals('Active').select('title').exec();
Run Code Online (Sandbox Code Playgroud)

虽然上面的查询应该可以解决问题,但我相信这意味着您也可以这样做:

book_data = await Book.find(
    // Query
    { slug: 'test', status: 'Active' },
    // Options
    { _id: 0, title: 1 }                
).exec();
Run Code Online (Sandbox Code Playgroud)

编辑2

我找到了一个更好的方法来做到这一点通过.find..

蒙戈游乐场

您的代码如下所示:

book_data = await Book.find({
  slug: "test",
  status: "active"
},
{
  title: 1,
  _id: {
    "$toString": "$_id"
  }
}).exec();
Run Code Online (Sandbox Code Playgroud)