zoukankan      html  css  js  c++  java
  • mongodb的基础了解

    MongoDB

    mongodb 文档型数据库 类json binary json 非关系型 (nosql)

    数据库 db) 集合(collection)表 文档(document) 数据

    安装配置

    * 有一个左下角小箭头 千万取消

    * 缺少 api-win-ms 文件 去postman 找

    * 缺少文件 C/data/db

    * mongod 运行数据库

    * mongo 通过终端(cmd 命令行) 链接数据库 并且可以执行 查询语句

    * mongodb 数据库

    * mongoose node的第三方插件 用来链接数据库

    * mongodb node的第三方插件 用来链接数据库

    *db操作

    db 指代当前使用的数据库

    show dbs (databases) 显示所有的数据库

    use dbname 切换数据库 创建数据库(如果数据库为空则为临时数据库)

    如果要创建非临时数据库 db里面创建一个集合

    db.dropDatabase();

    *collection操作

    db.createCollection('name') 创建一个集合

    show collecitons 查看当前所有的集合

    db.name.drop() 删除数据集合

    *document操作

    插入 db.name.insert(obj)

    * 插入多条数据参数为数组 db.name.insert([{},{},{}]

     

    * 插入是如果指定_id _id必须为唯一不重复

    插入 db.name.save(obj)

    * 如果主键不重复 等同于插入

    * 如果主键重复 那就是覆盖

    查询 db.name.find(obj)

     

    固值寻找

    寻找age集合里面所有含有属性值为wscats的文档结果,相当于where name = 'wscats'

    db.age.find({name:"wscats"})

    *db.name.find({key1:vale,key2:value......})

    *db.name.find({age:{$lt:17}})

    db.name.find().pretty() 将find查找的数据进行格式化 目的好看一点

     

    ANDOR寻找

    AND

    find()方法中,如果通过使用将它们分开传递多个键,则mongodb将其视为AND条件。 以下是AND的基本语法

    寻找_id1并且namewscats的所有结果集

    db.age.find( { $and: [ {"_id": 1}, {"name": "wscats"} ] } )

    OR

    在要根据OR条件查询文档,需要使用$or关键字。以下是OR条件的基本语法

    寻找namecorrine或者namewscats的所有结果集

    db.age.find( { $or: [ {"name": "corrine"}, {“name“: "wscats"} ] } )

    ANDOR等结合

    相当于语句where title = "wscats" OR ( title = "corrine" AND _id < 5)

    db.age.find({ $or: [{ "title": "wscats" }, { $and: [{ "title": "corrine" }, { "_id": { $lte: 5 } }] }] })

    修改

    db.name.update({查询条件},{$set 修改的数据},{multi:修改多条}) //修改更新

    * 只修改第一条查到的数据

    删除 db.name.remove(obj)

    * db.name.remove({}) 全部删除

    skip: 跳过几条

    limit: 限制几条数据

    sort:1 正序 -1 倒叙

    skip和limit 顺序无干系 都是先跳过后限制

    LimitSkip方法

    Limit

    如果你需要在mongodb中读取指定数量的数据记录,可以使用mongodbLimit方法,limit()法接受一个数字参数,该参数指定从mongodb中读取的记录条数。

    db.age.find().limit(数量)

    Skip

    我们除了可以使用limit()方法来读取指定数量的数据外,还可以使用skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。

    db.age.find().limit(数量).skip(数量) //skip()方法默认值为0 

    所以我们在实现分页的时候就可以用limit来限制每页多少条数据(一般固定一个值),用skip来决定显示第几页(一个有规律变动的值)

    #####主键

    * _id 唯一不重复 mongodb中主键可以自动生成 objectId 也可以人为指定

    * 在mongodb中没有表头的概念 插入的数据长度不限制 可以插入每一条都不一样的数据

    ##### 分页

    page 代表页数 1

    pagesize 每页数量 2

    db.name.find().skip((page-1)*pagesize).limit(pagesize)

    排序

    mongodb中使用使用sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段,并使用1-1来指定排序的方式,其中1为升序排列,而-1是用于降序排列。

    1 升序排列 -1 降序排列

    db.集合名.find().sort({键值(属性值):1})

    age集合表重新根据_id主键进行降序排列

    db.age.find().sort({ "_id": -1 })

    Node.js连接

    安装mongodb的模块

    npm install mongodb

    1.连接数据库

    var MongoClient = require('mongodb').MongoClient; //结尾是选择数据库名 var DB_CONN_STR = 'mongodb://localhost:27017/wscats'; MongoClient.connect(DB_CONN_STR, function(err, db) { console.log("连接成功!"); });

    2.查询数据

    注意查询回来的结果需要toArray来遍历处理

    var MongoClient = require('mongodb').MongoClient; var DB_CONN_STR = 'mongodb://localhost:27017/wscats'; MongoClient.connect(DB_CONN_STR, function(err, db) { console.log("连接成功!"); //选中age集合,并用find方法把结果集拿回来进行处理 db.collection("age").find({title: "cba"}).toArray(function(err, result) { if (err) { console.log('Error:' + err); return; } console.log(result); }); });

    经过测试,读取大于100条的时候会出现报错官网解释,可以尝试用forEach代替

    db.collection('pokemon').find({}) .forEach(function(item){ console.log(item) })

    查询ID

    查询自动生成的ObjectId

    var ObjectId = require('mongodb').ObjectId; let _id = ObjectId("5bcae50ed1f2c2f5e4e1a76a"); db.collection('xxx').find({ "_id": _id }).forEach(function (item) { console.log(item) })

    3.插入数据

    insert函数第一个参数是需要插入的值(可以一个也可以多个),第二个参数是接受一个回调函数,当值插入成功后回返回插入值得一些关键信息,比如_id

    var MongoClient = require('mongodb').MongoClient; var DB_CONN_STR = 'mongodb://localhost:27017/wscats'; MongoClient.connect(DB_CONN_STR, function(err, db) { console.log("连接成功!"); const db = client.db("demo"); db.collection("age").insert([ { title: "插入的值A" }, { title: "插入的值B" } ], function(err, result) { if (err) { console.log('Error:' + err); return; } console.log(result) }) });

    4.更新数据

    注意如果不加$set就是完全替换原来的那份(没有设置的属性值将会丢失),加上$set则只是更新对应的属性值,其余不做改变

    var MongoClient = require('mongodb').MongoClient; var DB_CONN_STR = 'mongodb://localhost:27017/wscats'; MongoClient.connect(DB_CONN_STR, function(err, db) { console.log("连接成功!"); db.collection("age").update({ "_id": 1 }, { $set: { title: "你好,世界", skill: "js" } }, function(err, result) { if (err) { console.log('Error:' + err); return; } //console.log(result); }); });

    5.删除数据

    var MongoClient = require('mongodb').MongoClient; var DB_CONN_STR = 'mongodb://localhost:27017/wscats'; MongoClient.connect(DB_CONN_STR, function(err, db) { console.log("连接成功!"); db.collection("age").remove({ "_id": 1 }, function(err, result) { if (err) { console.log('Error:' + err); return; } //console.log(result); //关闭数据库 db.close(); }); }); 

    6.关闭数据库

    db.close();

    封装自定义模块

    新建mongo.js写入以下代码,封装自定义模块,方便其他路由复用,注意assertnode自带的断言模块,用于测试代码

    参考

    const MongoClient = require('mongodb').MongoClient; const assert = require('assert'); const url = 'mongodb://localhost:27017'; const dbName = 'shop'; function query(callback) { MongoClient.connect(url, function(err, client) { assert.equal(null, err); console.log("Connected successfully to server"); const db = client.db(dbName); callback(db); client.close(); }); } module.exports = { query }

    在路由文件中引入和使用

    var mongo = require('./mongo.js') router.post('/addproduct', function(req, res, next) { mongo.query(function(db) { db.collection("product").insertMany([req.body], function(err, result) { console.log("Inserted 1 document into the collection"); res.send('respond with a resource'); }); }) });

  • 相关阅读:
    烂泥:高负载均衡学习haproxy之TCP应用
    烂泥:高负载均衡学习haproxy之关键词介绍
    sqlpuls基本命令
    Oracle开机自启动
    centos6.5安装oracle11g_2
    centos7安装图片界面
    centos7安装activemq
    centos7删除自带openjdk
    centos7安装nexus私服2.14
    mysql优化记录
  • 原文地址:https://www.cnblogs.com/newskill/p/10259796.html
Copyright © 2011-2022 走看看