本文仅作为作者的学习过程记录。
参考资料
MongoDB 概念解析 | 菜鸟教程 (runoob.com)
MongoDB CRUD操作_MonogDB 中文网
MongoDB聚合 - MongoDB-CN-Manual (mongoing.com)
MongoDB是一个基于分布式文件存储的数据库。它是一个非关系数据库。
MongoDB 将数据存储为一个文档。MongoDB是一个基于分布式文件存储的数据库。
NoSQL非关系型数据库,主要指那些非关系型的、分布式的,且一般不保证ACID的数据存储系统,主要代表MongoDB,Redis、CouchDB。
NoSQL提出了另一种理念,以键值来存储,且结构不稳定,**每一个元组都可以有不一样的字段,这种就不会局限于固定的结构,可以减少一些时间和空间的开销。**使用这种方式,为了获取用户的不同信息,不需要像关系型数据库中,需要进行多表查询。仅仅需要根据key来取出对应的value值即可。
启动Mongodb服务_MongoDB中文网
现在的安装已经不需要自己再去创建data文件夹了。
服务的名称也在安装的时候创建好了。
只需要在配置环境变量path里面配置bin文件夹下的路径即可。
net start mongodb
启动服务即可。
使用mongod
启动服务。
这里我已经将MongoDB服务器作为Windows服务运行了net start mongodb
。
如果需要修改端口等其他信息,先删除服务sc delete MongoDB
,修改配置文件,在启动服务即可。
mongo
默认情况下是直接连接的,也就是说不需要密码,当然也可以创建密码,具体的还需要百度。
MongoDB 设置用户名密码和数据库连接 - apegu - 博客园 (cnblogs.com)
建议直接用可视化开创建
推荐使用Robo3T
使用
mongo -u xxx -p 连接数据库
从上图中,我们可以知道,一个mongdb服务可以创建很多个数据库。
文档其实类似于sql中的行。也就是数据库中最小的单位。在mongodb里面相当于一个一个对象。
集合类似于sql中的table,它类似于js中的数组。
一个mongodb的服务可以创建很多的数据库。数据库就是一个仓库,里面可以放很很多的collection(集合)。一个项目一般只使用一个数据库。
show dbs
show databases
这个只会显示有数据的数据库名
use xxx
这是命令就是用来切换数据库的,如果该数据库不存在,那么自动创建一个数据库
db
要删除数据那,说要需要切换到需要删除的数据下。
db.dropDatabase();
语法
db.createCollection(name,options);
创建带有参数的数据库
创建一个固定集合,最大容量为1024字节,最大的文档数为1000
还有一种创建方式:当插入文档是,若集合不存在,那么自动创建该集合。
db.xxx.insert({“name”: “fjx”});
show collections 或 show tables;
语法
db.collection.drop(); 其中collection就是集合的名字。
返回值:如果删除成功则返回true,否则返回false
这里我们把t
集合删除。
db.collectionName.renameColleciotn(“new name”);
MongoDB 插入文档 | 菜鸟教程 (runoob.com)
文档的数据结构和 JSON 基本一样。
所有存储在集合中的数据都是 BSON 格式。
BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称。
语法
db.COLLECTION_NAME.insert(document)
或
db.COLLECTION_NAME.save(document) 已被废除
对于db.COLLECTION_NAME.insert(document)
来说,若插入数据的主键已经存则会抛 org.springframework.dao.DuplicateKeyException 异常,提示主键重复,不保存当前数据。
3.2 版本之后新增了 db.collection.insertOne() 和db.collection.insertMany()。
db.collection.insertOne() 用于向集合插入一个新文档,语法格式如下:
db.collection.insertOne(
,
{
writeConcern:
}
)
db.collection.insertMany() 用于向集合插入一个多个文档,语法格式如下:
db.collection.insertMany(
[ , , ... ],
{
writeConcern: ,
ordered:
}
)
参数说明:
具体操作
使用insert()
向users集合中插入一个用户,name:“fjx”,age:21.
使用insertOne()
向users集合中插入一个用户,name: “zyw”, age:20
使用insertMany()
用于向集合插入一个多个文档
其他的就不在演示了,具体看文档。
语法
update()、save()、updataOne()、updateMany()
实例
其中_id
是mongodb为我们自动生成的id。
如果不加$set
,那么就是直接覆盖这条文档的内容。当然,也许在collection里面有很多的name:“zj”,这里只会找到第一条,如果想要修改所有符合条件的记录,那么就要{multi:true}
。
db.collection.remove(查询条件)
官方推荐使用 deleteOne() 和 deleteMany() 方法。
如删除集合下全部文档:
db.inventory.deleteMany({})
删除 status 等于 A 的全部文档:
db.inventory.deleteMany({ status : "A" })
删除 status 等于 D 的一个文档:
db.inventory.deleteOne( { status: "D" } )
db.collection.find(查询条件)
db.collection.findOne(查询条件)
相当于是sql的where
在 mongodb 不能 > < >= <= !== 等运算符,需要使用替代符号
>
使用 $gt
<
使用 $lt
>=
使用 $gte
<=
使用 $lte
!==
使用 $ne
$gt -------- greater than >
$gte --------- gt equal >=
$lt -------- less than <
$lte --------- lt equal <=
$ne ----------- not equal !=
$eq -------- equal =
查询年龄大于等于20的用户。
查询年龄大于等于20且小于等于123的用户。
$in
满足其中一个即可
db.students.find({age:{$in:[18,24,26]}}) //
$or
逻辑或的情况
db.students.find({$or:[{age:18},{age:24}]});
$and
逻辑与的情况
db.students.find({$and: [{age: {$lt:20}}, {age: {$gt: 15}}]});
条件中可以直接使用JS的正则语法
db.collection.find({name:/xxxx/});
db.COLLECTION_NAME.find().sort({KEY:1})
看文档。
高级部分的学习直接看文档,边使用边学习。·
(3条消息) Mongoose (快速入门)_程程.的博客-CSDN博客_mongoose
中文文档
Mongoose 5.0 中文文档 (mongoosejs.net)
英文文档
Mongoose v6.0.13: Getting Started (mongoosejs.com)
mongoose是mongoDB的一个对象模型工具,是基于node-mongodb-native开发的mongoDB的nodejs驱动(基于元素的nodejs的mongodb开发的),可以在异步的环境下执行。同时它也是针对mongoDB操作的一个对象文档模型(ODM)库,封装了mongoDB对文档的一些增删改查等常用方法,让nodejs操作mongoDB数据库变得更加容易。
mongoose - npm (npmjs.com)
在安装之前必须确保已经安装了nodejs
和MongoDB
。
yarn add mongoose
或者
npm i mongoose -S
const mongoose = require('mongoose');
如果设置的有密码的话,mongodb://username:pwd:127.0.0.1/project?authSource=admin
mongoose.connect("mongodb://127.0.0.1/project?authSource=admin");
// 设置连接成功的回调函数, 连接成功以后就会执行对调里面的代码
mongoose.connection.on('open',() => {
//console.log('连接数据库成功');
// 创建文档结构对象(schema => 模式)
const userSchema = new mongoose.Schema({
// 允许 的类型:http://mongoosejs.net/docs/schematypes.html
userName: String,
password: String,
email: String,
age: Number
});
// 创建文档模型对象 集合的名称
const userModel = mongoose.model('users',userSchema);
// 对数据进行操作
userModel.create({
userName: "张三",
password: "123124",
age: 123
}, (err,data)=>{
if (err) throw err;
console.log(data);
});
})
mongoose.connection.on("open",()=>{
const starSchema = new mongoose.Schema({
name:String,
age: Number,
tags:Array
});
// 集合的名称若是单数,那么会自动转换为复数形式
const starModel = mongoose.model("star",starSchema);
starModel.insertMany([
{
name:'fjx',
age:18,
tags:["帅哥",'哈哈']
},
{
name:'zyw',
age:18,
tags:["帅哥",'哈哈']
},
{
name:'zt',
age:18,
tags:["帅哥",'哈哈']
}
],(err,data)=>{
if(err) throw err;
console.log(data);
})
})
删除一条数据
SongModel.deleteOne({_id:'5dd65f32be6401035cb5b1ed'}, function(err, data){
console.log(err);
console.log(data);
});
批量删除
SongModel.deleteMany({author:'Jay'}, function(err, data){
console.log(err);
console.log(data);
});
更新一条数据
SongModel.updateOne({author: 'JJ Lin'}, {author: '林俊杰'}, function (err, data) {
console.log(err);
console.log(data);
});
批量更新数据
SongModel.updateMany({author: 'Leehom Wang'}, {author: '王力宏'}, function (err, data) {
console.log(err);
console.log(data);
});
查询一条数据
SongModel.findOne({author: '王力宏'}, function(err, data){
console.log(err);
console.log(data);
});
//根据 id 查询数据
SongModel.findById('5dd662b5381fc316b44ce167',function(err, data){
console.log(err);
console.log(data);
});
批量查询数据
//不加条件查询
SongModel.find(function(err, data){
console.log(err);
console.log(data);
});
//加条件查询
SongModel.find({author: '王力宏'}, function(err, data){
console.log(err);
console.log(data);
});
SongModel.find().select({_id:0,title:1}).exec(function(err,data){
console.log(data);
});
SongModel.find().sort({hot:1}).exec(function(err,data){
console.log(data);
});
SongModel.find().skip(10).limit(10).exec(function(err,data){
console.log(data);
});
这只是对最基础的学习,更加深入的学习还需要不断的项目。