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

yyhrrdl8  于 2023-02-04  发布在  Go
关注(0)|答案(2)|浏览(195)

当我尝试查询时,结果包含_id字段,其中包含“new ObjectId()”。如何避免此“new ObjectId()”,并仅将散列值作为字符串包含。由于此问题,将数据作为JSON响应发送回失败。
下面是一个基本演示:

我的查询代码:

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

console.log( book_data )

答复:

[
  {
    _id: new ObjectId("6164aff742da0eac31a87b9a"),
    title: 'Test' 
  }
]
ifsvaxew

ifsvaxew1#

你可以传入一个options对象给.find方法,在那里,你可以通过提供一个0作为值来指定你想要忽略的字段。
See here for more信息。
类似下面这样的东西应该可以做到:

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

虽然上面的查询 * 应该 * 可以完成这个任务,但我相信这意味着您也可以执行以下操作:

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

编辑2

我找到了一个更好的方法来做到这一点通过.find
Mongo Playground
下面是您的代码:

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

pprl5pva2#

你可以把字符串

_id.toHexString();

相关问题