我有一個看起來像這樣的 MongoDB 檔案:
{
_id: 'EXISTING_ID'
}
我想洗掉此檔案,并嘗試使用此代碼來執行此操作(利用 MongoDB 的本機 node-js 驅動程式):
import { MongoClient, ObjectId } from "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");
然而,TypeScript 編譯器拋出一個錯誤,說沒有多載匹配這個呼叫;_id應該是型別ObjectId. 但是,如果我將呼叫替換為:
dbo.collection("my-collection").deleteOne({ _id: new ObjectId(id) }...
我收到一個運行時錯誤,說:
BSONTypeError: Argument passed in must be a single String of 12 bytes or a string of 24 hex characters
因為字串“EXISTING_ID”只有 11 個位元組的大小。
但是,我什至不認為這ObjectId是在這里使用的正確型別,因為我ObjectId在資料庫中沒有看到 。在_id對于上述檔案是一個字串。
在 Java 中,有方法findByIdor deleteById,但我在 NodeJS 中沒有看到這些方法。有沒有辦法實作我想要的,但我還沒有找到?
uj5u.com熱心網友回復:
您需要指定_id“my-collection”中使用的欄位型別。引數的Filter型別deleteOne使用InferIdType,默認為ObjectId。
至少行內:
dbo.collection<{_id: string}>("my-collection").deleteOne({ _id: id }, (err, obj) => {
但老實說,如果您使用打字稿,您最好為“我的收藏”中的物件指定正確的命名型別。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/383199.html
