将 MongoDB _id-Type 定义为字符串

Posted

技术标签:

【中文标题】将 MongoDB _id-Type 定义为字符串【英文标题】:Define MongoDB _id-Type as String 【发布时间】: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开始了解基本概念。 【参考方案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 类型。这就是为什么这个解决方案不起作用。您可以通过单击我在问题中链接的相关帖子来阅读此问题的前传。

以上是关于将 MongoDB _id-Type 定义为字符串的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose / MongoDB _id 作为字符串

为啥MongoDB在插入自定义id值时将_id加一

如何在聚合期间将mongodb子集合的objectid转换为字符串

将对象数组转换为mongodb中的字符串数组

使用 SQL 将字符串列转换为 mongodb 中的日期时间

将字符串字段转换为 MongoDB 中的编码字符串