mongoskin插入两个记录而不是一个

时间:2013-01-04 10:30:14

标签: mongodb mongoskin

我是新来的mongo等新手,我遇到了一个我需要帮助的奇怪问题。

我创建了一个app.js文件,我正在运行节点。它侦听Web请求并调用函数以使用mongoskin驱动程序将记录写入mongodb。它有点工作,但由于某种原因它将两条记录插入mongodb而不是一条。

我意识到代码不是一个好的设计,而且它目前是硬编码的,因为我只是想了解它是如何在这个阶段加入并协同工作的。无论如何这里是我的app.js中的代码:

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end( hello() );
}).listen(3000, '127.0.0.1');
console.log('Server running at http://127.0.0.1:3000/');

function hello()
{
    // test mongodb and mongoskin driver
    var msg = "";
    var db = require('mongoskin').db('localhost:27017/mydb'); 

    db.collection('users').insert({site: "test.com", email: "fredbloggs@gmail.com", firstname: "Fred", lastname: "Bloggs", password: "hello"}, 
        function(err, result) {
            if (err) msg = "fail";
            if (result) msg="success";
        });

    return msg; 
}

我的原始安装遇到了一些问题,并想知道我是否可能安装了mongo两次或类似的东西?是否有可能两个mongo实例正在接收我的请求并指向同一个数据库?可能有点脆弱,但任何帮助都会非常感激。

非常感谢 凯利。

2 个答案:

答案 0 :(得分:0)

由于您刚刚开始,您可能希望使用native driver而不是mongoskin。或者至少用它来测试你的配置。 Mongoskin是基于原生驱动程序构建的,并且两者都在积极开发中,因此很容易成为版本偏斜问题的牺牲品。一旦你对本机驱动程序感到满意,并且需要未来模式的便利,那么你应该能够轻松切换到mongoskin。

答案 1 :(得分:0)

您好,这是一个简单的驱动程序与您的示例。请注意,我们使用MongoClient连接一次到db,每个对Web服务器的请求现在都将重用连接池。

var   http = require('http');
    , MongoClient = require('mongodb').MongoClient;

MongoClient.connect("mongodb://localhost:27017/mydb", function(err, db) {

  http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    hello(res);
  }).listen(3000, '127.0.0.1');

  console.log('Server running at http://127.0.0.1:3000/');

  function hello(res) {
    // test mongodb and mongoskin driver
    db.collection('users').insert({
        site: "test.com"
      , email: "fredbloggs@gmail.com"
      , firstname: "Fred"
      , lastname: "Bloggs"
      , password: "hello" }, function(err, result) {
        var msg;

        if(err) msg = "fail";
        if(result) msg="success";

        res.end(msg);
      });
  }
})