正确输入MongoDB特定的收集方法,这些方法目前只是回落到“任何”

juzqafwq  于 2023-04-11  发布在  Go
关注(0)|答案(2)|浏览(124)

在我的应用程序中,我对Mongo收集方法的响应做了一些工作,并希望通过键入它们来使事情变得更容易,但似乎找不到如何做到这一点。
其中一个例子是deleteMany

{ "acknowledged" : true, "deletedCount" : X }

是不是有一个类型的地方为这个?或者我需要手动键入它在我的结束?
不幸的是,当从旧版本的mongo升级到v6时,这导致了一个问题,因为响应不再包含ok。如果有一个来自Mongo的类型,当属性不再存在时,它会显示TS错误,那就太好了。
代码看起来像这样:

const res = await this.deleteMany(query)  // res is currently an any type

if (res.deletedCount > 10) {
  // do something 
} else {
 // do something else
}

问题是res的类型是any,我想知道我是否真的需要构造自己的类型,或者我可以从某个地方导入它,以防在以后的版本中发生更改。
谢谢

iqih9akk

iqih9akk1#

您提到的文档页面包含以下注解:
本页记录了一个mongosh方法。这不是数据库命令或特定于语言的驱动程序(如Node.js)的文档。
node.js驱动程序中该函数的正确文档是:https://mongodb.github.io/node-mongodb-native/5.2/classes/Collection.html#deleteMany
这告诉我们返回类型是'Promise< DeleteResult >'

2vuwiymt

2vuwiymt2#

如果你有正确的mongodb Node.js驱动程序版本(截至撰写本文时为5.2.0),你应该有内置的TypeScript定义。
这样,您的res变量应该正确地类型为DeleteResult,并指出缺少的ok属性:

import { MongoClient } from 'mongodb'; // Version 5.2.0 as of time of writing

interface Pet {
    name: string;
    kind: 'dog' | 'cat' | 'fish';
}

const client = new MongoClient('mongodb://localhost:27017');
const pets = client.db().collection<Pet>('pets');

const res = await pets.deleteMany();
//    ^? DeleteResult

if (res.deletedCount > 10) { // Okay
    // do something 
} else {
    // do something else
}

res.ok; // Error: Property 'ok' does not exist on type 'DeleteResult'.
//  ~~

Playground链接
显然,首先要确保您的this上下文被正确地类型化为Mongo Collection。

相关问题