mongodb-nodejs-driver,DeprecationWarning:collection.count 已弃用

Posted

技术标签:

【中文标题】mongodb-nodejs-driver,DeprecationWarning:collection.count 已弃用【英文标题】:mongodb-nodejs-driver, DeprecationWarning: collection.count is deprecated 【发布时间】:2018-12-11 06:29:43 【问题描述】:

我想使用以下方法获取帖子文档的计数:

db.collection('posts').count()

但是,我收到了警告:

DeprecationWarning:collection.count 已弃用,将在未来版本中删除。请改用 collection.countDocuments 或 collection.estimatedDocumentCount

这是我的 mongodb nodejs 驱动版本:

  "dependencies": 
    "mongodb": "^3.1.0"
  ,
  "devDependencies": 
    "@types/mongodb": "^3.1.0",
    "chai": "^4.1.2",
    "mocha": "^5.1.1",
    "ts-node": "^7.0.0",
    "tslint": "^5.10.0",
    "typescript": "^2.9.2"
  

index.d.ts 文件中没有countDocumentsestimatedDocumentCount

我该如何解决这个警告?

【问题讨论】:

这是正确的语法吗?我认为你的查询有问题,括号内的内容是什么,如果你想计算字段上的任何内容,首先你需要找到然后计算 ex:db.collectionName.find(filedName : filedValue).count() 当然是正确的语法。您可以在 mongo shell 中对其进行测试。 【参考方案1】:

底层 mongodb 驱动程序已弃用 .count() 方法。您应该改用 .estimatedDocumentCount() 或 .countDocuments()。

【讨论】:

【参考方案2】:

如您所见,从MongoDB Node.JS driver v3.1 开始,count() 方法已被弃用,将被替换为:

Collection.countDocuments() Collection.estimatedDocumentCount()

这些方法已添加到node-mongodb-native 包本身。例如,通过 MongoDB Node.JS 驱动程序,您应该能够做到:

db.collection("posts").countDocuments(
  , // filters
  , // options
  function(error, result) 
    console.log(result);
  
);

另见NODE-1501

index.d.ts 文件中没有 countDocuments 或estimatedDocumentCount。

这是因为 mongodb npm 包的 TypeScript 定义尚未更新以包含这两个新方法。类型列表实际上由社区通过DefinitelyTyped(GitHub:DefinitelyTyped)单独维护

我已提交拉取请求DefinitelyTyped #27008 以添加新方法。一旦获得批准并发布,您应该能够看到键入的定义。

【讨论】:

哪一个与原始 .count 匹配?是 .countDocuments 对吗? @Anthony 这是估计的DocumentCount()

以上是关于mongodb-nodejs-driver,DeprecationWarning:collection.count 已弃用的主要内容,如果未能解决你的问题,请参考以下文章

20155306 白皎 0day漏洞——漏洞利用原理之DEP

实现一个最小版本vue之dep

Vue响应式原理obserserver、Dep、Watcher 的作用

mysql高级索引

(节点:71307)[DEP0079] 弃用警告

Go依赖管理工具 - dep