MongoDB学习笔记

MongoDB简介

  1. 为快捷开发而设计的数据库
  2. 设计目标是极简、灵活,避免oracle数据库会有字段类型等限制
  3. 数据模型是面向文档,所谓文档是类似JSON的数据

MongoDB下载及安装

  1. 对32位支持不好,建议安装64位系统
  2. 偶数版本是稳定版,奇数版是开发版,建议下载偶数版本
  3. 默认点击next安装

启动数据库

  1. 配置环境变量,找mongo安装路径的bin目录,将路径添加到path中,打开命令行输入:mongod验证是否配置完成
  2. 创建数据库目录:存储数据库文件
  3. 启动数据库,cmd输入:mongod 已打开的窗口不可关闭
  4. 再次打开cmd窗口,输入 mongo 链接mongodb,出现 >

变量配置

  1. 文件位置设置:mongod --dbpath 数据库路径
  2. 端口设置:默认是27017 修改:–port 10086 (建议4位以上,避免和系统端口冲突)

数据库

  1. 数据库的服务器:保存数据 命令:mongod
  2. 数据库的客户端:操作数据 命令:mongo

配置开机自启

省略

基本概念

概念解释
数据库database数据库是仓库,仓库可以存放集合,数据库服务器可以有多个数据库
集合collection集合类似数组,集合可以存放文档
文档document

基本指令

操作命令
查看数据库show databases
进入数据库use 数据库名
显示当前数据库db
显示集合show collection

MongoDB的CROD

插入
db..insert(doc)
数据库.集合名.insert(文档)

查询
db..find()
数据库.集合.find()

安装图形化操作界面

F6执行光标所在行的sql

数据库操作

mongoDB官方文档

  • insert

在这里插入图片描述
在这里插入图片描述

  • query
    在这里插入图片描述
    在这里插入图片描述

举栗子

{ status: { $in: [ "A", "D" ] } }
SELECT * FROM inventory WHERE status in ("A", "D")
{ status: "A", qty: { $lt: 30 } }
SELECT * FROM inventory WHERE status = "A" AND qty < 30
{ $or: [ { status: "A" }, { qty: { $lt: 30 } } ] }
SELECT * FROM inventory WHERE status = "A" OR qty < 30
{ status: "A", $or: [ { qty: { $lt: 30 } }, { item: /^p/ } ] }
SELECT * FROM inventory WHERE status = "A" AND ( qty < 30 OR item LIKE "p%")

Match an Array
按指定顺序查询字段标记值为正好包含两个元素“红色”和“空白”的数组的所有文档:

db.inventory.find( { tags: ["red", "blank"] } )

希望查找同时包含元素“red”和“blank”的数组,而不考虑数组中的顺序或其他元素,请使用$all运算符

db.inventory.find( { tags: { $all: ["red", "blank"] } } )

在这里插入图片描述
在这里插入图片描述

  • 修改
db.collection.update(查询条件,新对象)

–默认用新对象替换旧对象
–如果需要修改指定的属性,而不是替换为新对象则需要使用修改操作符来完成
$set 可以修改文档中的指定属性

db.stus.update({name : "沙和尚"},{age:18})
db.stus.update({name : "沙和尚"},{$set:{address:流沙河}})

$unset删除属性
–update默认只会修改一个

db.collection.updateMany()

-修改多个符合条件的文档

db.collection.updateOne()

–修改一个符合条件的文档
在这里插入图片描述
举栗子

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 删除
db.collection.remove()
-删除符合条件的一个或者多个文档
--如果remove可以根据条件删除文档
--如果只传递空对象作为参数,则清空集合
--必须传递参数,可传空参
db.collection.deleteOne()
db.collection.deleteMany()
-remove()可以根据条件删除文档,传递条件和find一样
db.collection.drop()

-删除集合
在这里插入图片描述

db.inventory.find( { qty: { $lt: 20 } } )
db.inventory.update( { "carrier.fee": { $lt: 20 } }, { $set: { price: 9.99 } } )

排序

db.emp.find({}).sort({sal:1})
--1:升序  -1:降序
db.emp.find({}).sort({sal:1,empno:-1})
--按照sal升序再按照empno降序
//limit skip sort 可以任意顺序调用

投影

--在查询时,可以在第二个参数位置设置查询结果的投影
db.emp.find({},{ename:1,_id:0})
--1:显示    0:不显示

mongoose

在这里插入图片描述
在这里插入图片描述

mongoose使用

--1.下载安装mongoose
	npm i mongoose --save
--2.项目中引入mongoose
	var mongoose = require("mongoose")
--3.链接mongooseDB数据库
	mongoose.connect("mongodb://数据库的ip:端口号/数据库名",{useMongoClient:true});
	--如果端口号是默认端口号(27017)则可以省略不写
--4.断开数据库链接
mongoose.disconnect();
--5.监听数据库链接状态
	mongoose.connection.once("open",function(){})
	mongoose.connection.once("close",function(){})

在这里插入图片描述创建Schema对象
在这里插入图片描述

创建model

model代表数据库的集合
mongoose.model(modelName,schema);
--mongoose 会自动将集合名变为复数
var stuModel=mongoose.model("student",stuSchema)

插入文档

stuModel.create({},function(err){});
stuModel.create({
name :"zyn",
age:"18"
},function(err){

});

model

find()

// find all documents
await MyModel.find({});

// find all documents named john and at least 18
await MyModel.find({ name: 'john', age: { $gte: 18 } }).exec();

// executes, passing results to callback
MyModel.find({ name: 'john', age: { $gte: 18 }}, function (err, docs) {});

// executes, name LIKE john and only selecting the "name" and "friends" fields
//投影 
await MyModel.find({ name: /john/i }, 'name friends').exec();

// passing options
await MyModel.find({ name: /john/i }, null, { skip: 10 }).exec();

Model.findById()

// Find the adventure with the given `id`, or `null` if not found
await Adventure.findById(id).exec();

// using callback
Adventure.findById(id, function (err, adventure) {});

// select only the adventures name and length
await Adventure.findById(id, 'name length').exec();

Model.findOne()

// Find one adventure whose `country` is 'Croatia', otherwise `null`
await Adventure.findOne({ country: 'Croatia' }).exec();

// using callback
Adventure.findOne({ country: 'Croatia' }, function (err, adventure) {});

// select only the adventures name and length
await Adventure.findOne({ country: 'Croatia' }, 'name length').exec();

Model.update()

const query = { name: 'borne' };
Model.update(query, { name: 'jason bourne' }, options, callback);

// is sent as
Model.update(query, { $set: { name: 'jason bourne' }}, options, function(err, res));
// if overwrite option is false. If overwrite is true, sent without the $set wrapper.

Model.deleteOne()
Model.count()

const count = await Adventure.count({ type: 'jungle' });
console.log('there are %d jungle adventures', count);

Documents

get()与set()
doc.name = ‘foo’;
await doc.save();
toJson()
toObject()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值