美文网首页
MongoDB 4.0 的启动 关闭和在Node中的使用

MongoDB 4.0 的启动 关闭和在Node中的使用

作者: 般犀 | 来源:发表于2018-12-19 19:24 被阅读0次

    之前的3.6 一直搞不好window Service 这块,4.0安装的时候直接就把服务这块给你做了,方便了很多。把3.6卸了装了4.0.

    安装成功后,启动 MongoDB:

    "C:\Program Files\MongoDB\Server\4.0\bin\mongod.exe" --dbpath="I:\data\db"
    

    --dbpath指向的是你的数据库目录,必须先创建,MongoDB 不会帮你自动创建。

    如何直观地看到 MongoDB 中的数据

    一开始觉得 MongoDB 很难搞的原因是,似乎没看到有教程提到 MongoDB 有 Mysql 的 navicat 一样的可视化应用,这样如果知道自己对数据库的操作有没有实现呢。后来简书的一篇博客上看到了一个叫 robomongo 的跨系统可视化应用,推荐下载。

    Node 连接数据库

    数据库启动后:
    首先 新建一个文件夹,在当前文件夹打开命令行工具(最方便的是使用 vscode 自带的命令行),初始化 package.json:

    npm init -y
    

    然后安装 mongodb:

    npm i mongodb
    

    新建一个文件叫demo_create_mongo_db.js,下面的所有操作都可以在这个文件进行。
    连接数据库:

    var MongoClient = require('mongodb').MongoClient;
    var url = "mongodb://localhost:27017/mydb";
    
    MongoClient.connect(url, function(err, db) {
      if (err) throw err;
      console.log("Database created!");
      db.close();
    });
    

    如果是用命令行工具,则在命令行工具输入:

    node demo_create_mongo_db.js
    

    可看到运行结果,用 vscode 的只需要按 F5 就会在终端自动运行。
    如果成功连接,控制台会打印 "Database created!"。

    创建 Collection

    var MongoClient = require('mongodb').MongoClient;
    var url = "mongodb://localhost:27017/";
    
    MongoClient.connect(url, function(err, db) {
      if (err) throw err;
      var dbo = db.db("mydb");
      dbo.createCollection("customers", function(err, res) {
        if (err) throw err;
        console.log("Collection created!");
        db.close();
      });
    });
    

    如果创建成功,控制台会打印 "Collection created!"。

    • 在 Mysql 中的 Table 对应的就是 MongoDB 的 Collection。record 在 MongoDB 中则被称为 document.

    插入

    插入一个 document,使用的 API 是 insertOne()
    insertOne的第一个参数是一个你想插入 document 中的 JSON 对象。第二个参数是方法的回调。

    var MongoClient = require('mongodb').MongoClient;
    var url = "mongodb://localhost:27017/";
    
    MongoClient.connect(url, function(err, db) {
      if (err) throw err;
      var dbo = db.db("mydb");
      var myobj = { name: "Company Inc", address: "Highway 37" };
      dbo.collection("customers").insertOne(myobj, function(err, res) {
        if (err) throw err;
        console.log("1 document inserted");
        db.close();
      });
    });
    

    如果创建成功,控制台会打印 "Collection created!"。在 robomongo 中也可以看到:

    robomongo 中的记录
    一份 document 中的数据是用 键值对 的形式保存的。 一个document 就是一个对象 ,每个 document 有一个特定的 _id。这个 _id可以自定义,但是必须保证 _id在一个 Collection 中是独一无二的。

    插入多个 documents

    当要一次性插入多个 documents 时,就要用到 API insertMany() ,多个对象用数据包裹起来:

    var MongoClient = require('mongodb').MongoClient;
    var url = "mongodb://localhost:27017/";
    
    MongoClient.connect(url, function(err, db) {
      if (err) throw err;
      var dbo = db.db("mydb");
      var myobj = [
        { name: 'John', address: 'Highway 71'},
        { name: 'Peter', address: 'Lowstreet 4'},
        { name: 'Amy', address: 'Apple st 652'},
        { name: 'Hannah', address: 'Mountain 21'},
        { name: 'Michael', address: 'Valley 345'},
        { name: 'Sandy', address: 'Ocean blvd 2'},
        { name: 'Betty', address: 'Green Grass 1'},
        { name: 'Richard', address: 'Sky st 331'},
        { name: 'Susan', address: 'One way 98'},
        { name: 'Vicky', address: 'Yellow Garden 2'},
        { name: 'Ben', address: 'Park Lane 38'},
        { name: 'William', address: 'Central st 954'},
        { name: 'Chuck', address: 'Main Road 989'},
        { name: 'Viola', address: 'Sideway 1633'}
      ];
      dbo.collection("customers").insertMany(myobj, function(err, res) {
        if (err) throw err;
        console.log("Number of documents inserted: " + res.insertedCount);
        db.close();
      });
    });
    
    插入多个 documents 返回的结果对象

    插入多个 documents 返回的结果对象包含的信息反应了 插入如何影响数据库,上面的例子中插入后返回的结果对象如下:

    {
      result: { ok: 1, n: 14 },
      ops: [
        { name: 'John', address: 'Highway 71', _id: 58fdbf5c0ef8a50b4cdd9a84 },
        { name: 'Peter', address: 'Lowstreet 4', _id: 58fdbf5c0ef8a50b4cdd9a85 },
        { name: 'Amy', address: 'Apple st 652', _id: 58fdbf5c0ef8a50b4cdd9a86 },
        { name: 'Hannah', address: 'Mountain 21', _id: 58fdbf5c0ef8a50b4cdd9a87 },
        { name: 'Michael', address: 'Valley 345', _id: 58fdbf5c0ef8a50b4cdd9a88 },
        { name: 'Sandy', address: 'Ocean blvd 2', _id: 58fdbf5c0ef8a50b4cdd9a89 },
        { name: 'Betty', address: 'Green Grass 1', _id: 58fdbf5c0ef8a50b4cdd9a8a },
        { name: 'Richard', address: 'Sky st 331', _id: 58fdbf5c0ef8a50b4cdd9a8b },
        { name: 'Susan', address: 'One way 98', _id: 58fdbf5c0ef8a50b4cdd9a8c },
        { name: 'Vicky', address: 'Yellow Garden 2', _id: 58fdbf5c0ef8a50b4cdd9a8d },
        { name: 'Ben', address: 'Park Lane 38', _id: 58fdbf5c0ef8a50b4cdd9a8e },
        { name: 'William', address: 'Central st 954', _id: 58fdbf5c0ef8a50b4cdd9a8f },
        { name: 'Chuck', address: 'Main Road 989', _id: 58fdbf5c0ef8a50b4cdd9a90 },
        { name: 'Viola', address: 'Sideway 1633', _id: 58fdbf5c0ef8a50b4cdd9a91 } ],
      insertedCount: 14,
      insertedIds: [
        58fdbf5c0ef8a50b4cdd9a84,
        58fdbf5c0ef8a50b4cdd9a85,
        58fdbf5c0ef8a50b4cdd9a86,
        58fdbf5c0ef8a50b4cdd9a87,
        58fdbf5c0ef8a50b4cdd9a88,
        58fdbf5c0ef8a50b4cdd9a89,
        58fdbf5c0ef8a50b4cdd9a8a,
        58fdbf5c0ef8a50b4cdd9a8b,
        58fdbf5c0ef8a50b4cdd9a8c,
        58fdbf5c0ef8a50b4cdd9a8d,
        58fdbf5c0ef8a50b4cdd9a8e,
        58fdbf5c0ef8a50b4cdd9a8f 
        58fdbf5c0ef8a50b4cdd9a90,
        58fdbf5c0ef8a50b4cdd9a91 ]
    }
    

    查找

    查找一项

    插入使用 API findOne()

    var MongoClient = require('mongodb').MongoClient;
    var url = "mongodb://localhost:27017/";
    
    MongoClient.connect(url, function(err, db) {
      if (err) throw err;
      var dbo = db.db("mydb");
      dbo.collection("customers").findOne({}, function(err, result) {
        if (err) throw err;
        console.log(result.name);
        db.close();
      });
    });
    

    查找全部项

    查找多项可不是 findMany()!而是使用 find()用法稍有不同,有点像链式调用:

    var MongoClient = require('mongodb').MongoClient;
    var url = "mongodb://localhost:27017/";
    
    MongoClient.connect(url, function(err, db) {
      if (err) throw err;
      var dbo = db.db("mydb");
      dbo.collection("customers").find({}).toArray(function(err, result) {
        if (err) throw err;
        console.log(result);
        db.close();
      });
    });
    

    查找某些项

    find()方法的第二个参数是一个 projection对象,描述哪个范围中的数据要出现在结果中:

    var MongoClient = require('mongodb').MongoClient;
    var url = "mongodb://localhost:27017/";
    
    MongoClient.connect(url, function(err, db) {
      if (err) throw err;
      var dbo = db.db("mydb");
      dbo.collection("customers").find({}, { projection: { _id: 0, name: 1, address: 1 } }).toArray(function(err, result) {
        if (err) throw err;
        console.log(result);
        db.close();
      });
    });
    

    这样会打印出全部数据,0 和 1 表示的应该是 排除选中{ _id: 0, name: 1, address: 1 }指的是查找结果中,只显示属性 nameaddress ,不显示 _id,运行结果如下:

    _id 没有出现在返回结果中

    不能同时出现 0 和 1 在同一个对象中,(除非这个属性是 _id),一旦在 projection 中指定了某一个属性是 0,则代表除了这个属性不出现在结果中,其他属性都显示,如果指定一个属性是1,则代表只有这个属性出现在结果中。同时指定 0 和 1 会导致报错:MongoError: Projection cannot have a mix of inclusion and exclusion.

    查询(query)

    find()传入第一个参数,是一个对象,用于筛选查找结果:

    var MongoClient = require('mongodb').MongoClient;
    var url = "mongodb://localhost:27017/";
    
    MongoClient.connect(url, function(err, db) {
     if (err) throw err;
     var dbo = db.db("mydb");
     var query = { address: "Park Lane 38" };
     dbo.collection("customers").find(query).toArray(function(err, result) {
       if (err) throw err;
       console.log(result);
       db.close();
     });
    });
    

    关闭 MongoDB

    在命令行中

    use admin
    db.shutdownServer()
    

    参考文章:
    Node.js MongoDB Create Collection
    MongoDB安装/配置/启动/命令 - 简书

    相关文章

      网友评论

          本文标题:MongoDB 4.0 的启动 关闭和在Node中的使用

          本文链接:https://www.haomeiwen.com/subject/ircskqtx.html