2013-12-20 81 views
13

我对mongoDB完全陌生,而且对Node.js没有经验,所以如果下面的代码远非完美,请原谅。从node.js中删除mongodb集合中的文档

我们的目标是从集合中删除一个文档,引用它的_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(); 
}); 

我不必关闭连接吗?当我没有关闭它并且程序没有结束时发生了什么?

谢谢!

+2

什么也没有发生,你的程序只是在等待从蒙戈司机一些I/O。当然,你知道没有东西会到达,你也不会发送任何东西,但是Node不知道这个,所以它不能完成。 – kamituel

回答

18

欢迎异步风格:

  • 你不应该使用掷回调,抛是良好的函数栈
  • 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(); 
     }); 
    }); 
}); 
+0

这工作很好,谢谢:) – marc0s

+0

它的工作原理,但我想了解为什么你必须调用关闭,所以实际上删除发生... – Jeep87c

相关问题