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

Posted

技术标签:

【中文标题】Mongoose 在结果的 _id 字段中返回“new ObjectId”【英文标题】:Mongoose returns "new ObjectId" in _id field of the result 【发布时间】:2021-11-30 14:30:42 【问题描述】:

当我尝试查询时,结果包含_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' 
  
]

【问题讨论】:

【参考方案1】:

您可以将选项对象传递给.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();

【讨论】:

谢谢,这很方便。但我想得到值6164aff742da0eac31a87b9a 而不是new ObjectId("6164aff742da0eac31a87b9a")。有什么办法吗? 对不起@VppMan - 请查看我的更新。 抱歉(再次)@VppMan 哈哈 - 请在我的回答中查看 Edit 2。我通过.find找到了更好的方法。

以上是关于Mongoose 在结果的 _id 字段中返回“new ObjectId”的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose.js 除了 _id & __v 默认来自查询结果

Mongoose.js 除了 _id & __v 默认来自查询结果

如何在返回结果中创建新字段并根据使用 Mongoose 的条件在其中设置值?

Mongoose 中的“__v”字段是啥

Mongoose 中的“__v”字段是啥

Mongoose 聚合内部查找按字段分组