我对mongoDB完全陌生,对Node没有经验.如果下面的代码还远远不够完美,请原谅.

目标是从一个集合中删除一个文档,该文档由其_id引用.删除操作已经完成(在mongo shell中进行了判断),但代码没有结束(运行node myscript.js无法取回我的shell).如果我加db.close(),我得到{ [MongoError: Connection Closed By Application] name: 'MongoError' }.

var MongoClient = require("mongodb").MongoClient;
var ObjectID = require("mongodb").ObjectID;

MongoClient.connect('mongodb://localhost/mochatests', function(err, db) {
    if (err) {
        console.log("error connecting");
        throw err;
    }
    db.collection('contacts', {}, function(err, contacts) {
        if (err) {
            console.log("error getting collection");
            throw err;
        }
        contacts.remove({_id: ObjectID("52b2f757b8116e1df2eb46ac")}, {safe: true}, function(err, result) {
            if (err) {
                console.log(err);
                throw err;
            }
            console.log(result);
        });
    });
    db.close();
});

我不需要关闭连接吗?当我不关闭它,程序没有结束时会发生什么?

谢谢

推荐答案

欢迎使用异步样式:

  • 您不应该将throw用于回调,throw有利于函数堆栈
  • 移除完成后,回调中应该有db.close().

例子:

MongoClient.connect('mongodb://localhost/mochatests', function(err, db) {
    db.collection('contacts', {}, function(err, contacts) {
        contacts.remove({_id: ObjectID("52b2f757b8116e1df2eb46ac")}, function(err, result) {
            if (err) {
                console.log(err);
            }
            console.log(result);
            db.close();
        });
    });
});

Mongodb相关问答推荐

Mongo聚合项目数组交集

try 从数据库创建、获取数据时失败(pymongo、MongoDB、docker-compose)

MongoDB聚合$group阶段$top与$first在大型数据集上的效率

MongoDB 在一个聚合中包含多个组

从 Amazon S3(Next.js、Mongodb、Mongoose)删除图像

MongoDB 聚合 - 条件 $lookup 取决于字段是否存在

在 ExpirePolicy 之后从 Store 中删除元素

MongoDb $filter,然后获取非重复计数

将子文档中的所有字段设置为 false,然后在单个查询中将第二个字段设置为 true

MongoDB - 在 $lookup 管道中匹配键匹配不起作用

没有mongoose 的 Express 和 MongoDB

mongoose默认值等于其他值

我怎样才能更快地scrape

mongodb 模式设计命名约定

在 Nodejs 中配置最大旧空间大小

不能在模块外使用 import 语句

mongoose得到`TypeError: user.save is not a function` - 出了什么问题

mongodb:upserting:仅在插入文档时设置值

MongoDB mongoexport 查询

如何在 Windows 上停止 mongodb 服务器?