【问题标题】:mongo - dropping non existant collection throws 'ns not found'mongo - 删除不存在的集合会抛出“ns not found”
【发布时间】:2018-11-30 13:22:44
【问题描述】:

我正在尝试删除一个不存在的集合,但出现以下错误:

MongoError: 未找到 ns。

在类似的问题中,有一个指向 mongo 代码的链接,表明这是预期的行为:

MongoError: ns not found when try to drop collection

但是,根据 mongo 文档,如果集合不存在,此方法应该返回 false

https://docs.mongodb.com/manual/reference/method/db.collection.drop/#db.collection.drop

我错过了什么?

服务器版本 - 3.6.5,mongodb 客户端 (javascript) - 3.0.21

我使用的命令:

await mongodb.collection('colname').drop()

mongodb.collection('colname').drop((err, res) => {
    console.log('err: ' + err + ', res: ' + res) // doesn't get called
})

【问题讨论】:

  • 您已链接到另一个答案。该答案包括您需要的一切。
  • 官方文档说的是别的。这个问题的可能答案可能会解决这个矛盾(文档中的错误等)
  • 点击您的第一个链接并阅读答案。都在那里。
  • 我仔细阅读了,文档没有提到
  • 我将代码添加到问题中。几分钟前,我注意到文档中提到了“shell 命令”。它在 javascript 中,但不是驱动程序 api,这可能是导致不同行为的原因。令人困惑..

标签: mongodb


【解决方案1】:

你的链接指的是mongo客户端的命令界面。它使用 javascript,但它是一个拥有自己的 REPL 的应用程序。文档是正确的。

您使用的命令来自官方的 mongodb 节点包。这些命令的行为与 mongo 客户端上的不同。有关您的使用的文档在这里:http://mongodb.github.io/node-mongodb-native/3.0/api/Collection.html#drop

顺便说一句,第一个参数是一个选项对象,第二个是回调。

您提供的回调仅在成功的 mongodb 查询时调用。当集合不存在时(就像在这种情况下),回调不会被执行。但是这个函数返回一个promise,可以用来处理任何错误:

mongodb.collection('colname').drop().then(function () {
    // success
}).catch(function () {
    // error handling
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-18
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多