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 默认来自查询结果