将 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 定义为字符串的主要内容,如果未能解决你的问题,请参考以下文章
如何在聚合期间将mongodb子集合的objectid转换为字符串