【问题标题】:Mongoose returns "new ObjectId" in _id field of the resultMongoose 在结果的 _id 字段中返回“new ObjectId”
【发布时间】: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' 
  }
]

【问题讨论】:

    标签: node.js reactjs mongodb mongoose next.js


    【解决方案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找到了更好的方法。
    猜你喜欢
    • 1970-01-01
    • 2015-03-06
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-22
    • 2017-12-14
    相关资源
    最近更新 更多