【问题标题】:Define MongoDB _id-Type as String将 MongoDB _id-Type 定义为字符串
【发布时间】:2022-01-18 12:21:01
【问题描述】:

我想从我的数据库中删除以下文档:

{
    _id: 'EXISTING_ID'
}

如您所见,_id 被定义为字符串,而不是ObjectId。这使得删除变得困难,因为我不能使用以下代码(利用 node.js 的本机 MongoDB 驱动程序):

export const deleteDocumentWithId = (id: string) => {
  return MongoClient.connect(dbUrl, (err, db) => {
    if (err) {
      throw err;
    }

    const dbo = db.db("my-db");

    dbo.collection("my-collection").deleteOne({ _id: id }, (err, obj) => {
      if (err) {
        throw err;
      }
      db.close();
    });
  });
};

deleteDocumentWithId("EXISTING_ID");

a related question of mine 中,用户评论将_id 定义为字符串并链接到this part of the documentation。但是,我认为InferIdType 在这里没有帮助,因为它只产生传入类型的_id 类型:

import {InferIdType} from "mongodb";

type obj = {
  _id: string;
};

const foo: InferIdType<obj> = undefined; // foo is of type string

如何在此处将_id 定义为字符串类型?

【问题讨论】:

  • db.collection.deleteOne( { _id: 'EXISTING_ID' } )- mongo shell 中的这个命令会从集合中删除文档(您已发布)。
  • 感谢您的评论!但是,这并没有多大帮助,因为我的用例必须使用 node.js。
  • 我看到您正在指定id 类型的id 函数参数ObjectId - 它不是您想要的string 类型吗?
  • 复制粘贴错误。对不起。我编辑了问题。
  • 我回答了最初的问题。我很欣赏它一定会令人困惑,甚至可能令人沮丧,但实际上没有必要增加不必要的问题。请尊重针对重复的 SO 政策并删除此政策。尝试从更简单的示例中学习 Mongo+Typescript,例如从docs.mongodb.com/drivers/node/current/fundamentals/typescript开始了解基本概念。

标签: node.js database mongodb documentation uniqueidentifier


【解决方案1】:

你必须在你的头文件中使用这些

const ObjectId = require('mongodb').ObjectId;

你的函数看起来像:-

export const deleteDocumentWithId = (id: string) => {
  return MongoClient.connect(dbUrl, (err, db) => {
    if (err) {
      throw err;
    }

    const dbo = db.db("my-db");
    var ids = new ObjectId(id);

    dbo.collection("my-collection").deleteOne({ _id: ids }, (err, obj) => {
      if (err) {
        throw err;
      }
      db.close();
    });
  });
};

deleteDocumentWithId("EXISTING_ID");

【讨论】:

  • 感谢您的回答!正如我在问题中所述,我的文档的_id 是字符串类型。不是ObjectId 类型。这就是为什么这个解决方案不起作用。您可以通过单击我在问题中链接的相关帖子来阅读此问题的前传。
猜你喜欢
  • 2019-03-12
  • 2018-06-25
  • 1970-01-01
  • 1970-01-01
  • 2011-12-07
  • 1970-01-01
  • 2021-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多