在集合mongodb

时间:2016-10-22 17:34:22

标签: mongodb export database

我试图找出一个post ajax调用的基本基础结构,以便在我的数据库中保存一些名为'范围的集合。

  1. 当我刚运行node connection.js时,我得到了 "无法阅读属性'范围'未定义",我创建该集合是错误的吗?

  2. 是否有必要在插入之前创建它?我读过MongdoDB应该为你创建的集合,如果不存在的话。

  3. 我应该在某个时候db.close()我的连接函数吗?

  4. 导出数据库时,是否会自动将引用导出到其下方的集合中?

  5. connection.js

    MongoClient = require('mongodb').MongoClient,
    Server = require('mongodb').Server;
    var url = 'mongodb://localhost:27017/test';
    var db = MongoClient.connect(url, function (err, db) {
    if (err) {
      console.log('Unable to connect to the mongoDB server. Error:', err);
    } else {
      console.log('Connection established to', url);
      db.createCollection("ranges");
    
    }});
    
    doSomething = function() {
    db.ranges.insert ({"hello" : "world"});
    };
    
    module.exports = db;
    

    app.js

    var express = require('express');
    cors = require('cors');
    var app = express();
    app.use('/', express.static('/public'));
    app.use(cors());
    var db = require('./connection');
    
    app.get('/', function(req, res){
    res.send('Got a GET request');
     });
    
    app.post('/', function(req, res){
    res.send('Got a POST request');
    
    });
    
    
    app.listen(3000,function(){
    console.log("Server started successfully at Port 3000!");
    });
    

1 个答案:

答案 0 :(得分:0)

1 - db未定义,因为您在导出连接之前不等待连接准备就绪。也许在需要db后才能更好地连接,以便能够在回调后执行操作

此外,createCollection是异步操作,因此您可能在创建之前调用insert方法。你应该这样:

db.createCollection("ranges", function(err, collection){
    collection.insert({"hello" : "world"});
});

但如果已经创建了ranges集合,那么您应该没有问题。

2 - Mongo将在您向其中插入文档时为您创建集合,但有时您可能会遇到类似于您所拥有的错误,因为集合不存在您将具有空引用。(现在我&#39 ;我不确定驱动程序是否足够聪明,如果它不存在则为你创建

3 - 虽然不是完全必要,但有时最好关闭连接。我通常在收到SIGTERMSIGINT时这样做。见例:

process.on('SIGTERM', function() {
  db.close()
  process.exit(0);
});

4 - 是的,但请确保首先创建它们(请记住它是第一个项目,它是异步操作)

(另一个提示,检查mongoose,也许会让事情变得更容易)