欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報邀請碼778899分享:mongodb數(shù)據(jù)庫使用

柚子快報邀請碼778899分享:mongodb數(shù)據(jù)庫使用

http://yzkb.51969.com/

一、下載安裝

不同版本的下載安裝方式不同,大家根據(jù)所需版本百度安裝

官網(wǎng)MongoDB: The Developer Data Platform | MongoDB

二、基本概念

1、什么是mongo

一種數(shù)據(jù)庫,而且是非關系型數(shù)據(jù)庫??梢钥焖匍_發(fā)web型應用,因為靈活,不用像關系型數(shù)據(jù)庫一樣需要建表,MongoDB存儲的是文檔(document),文檔內(nèi)存儲的是類似json的結(jié)構

2、mongo中的幾個概念

數(shù)據(jù)庫 database 集合(數(shù)組) collection

類似與SQL中的數(shù)據(jù)表,本質(zhì)上是一個數(shù)組,里面包含看多個文檔對象,[{},{},{}] 文檔對象 document

類似與SQL中的記錄,一個文檔對象{}就是一條記錄 一個數(shù)據(jù)庫由多個集合構成,一個集合包含多個文檔對象。

3、基本使用

show dbs 或show databases

查看所有的數(shù)據(jù)庫use xxx

切換到指定的數(shù)據(jù)庫db

查看當前操作的數(shù)據(jù)庫show collections

查看當前數(shù)據(jù)庫中所有的集合

MongoDB關系: 數(shù)據(jù)庫(database) > 集合(collection)> 文檔(document)

值得注意的是: 在MongoDB中不需要自己創(chuàng)建數(shù)據(jù)庫和集合,便可以直接創(chuàng)建文檔,其實就是在創(chuàng)建文檔的同時,會將數(shù)據(jù)庫和集合創(chuàng)建了。

4、mongodbmanagerfree

mongodb?可視化工具下載路徑

Download NoSQL Manager for MongoDB Freeware

三、?數(shù)據(jù)庫的CRUD操作

具體內(nèi)容查看官方文檔: https://mongoosejs.com/

核心: 增: insert() 刪: remove() 查: find() 改: update()

1、增加

db.collection.insert()

向集合中插入一個或多個文檔,當我們向集合中插入文檔時,如果沒有給文檔指定_id屬性,則數(shù)據(jù)庫會自動給文檔添加_id,該屬性用來作為文檔的唯一標識,_id可以自己指定,如果我們指定了,數(shù)據(jù)庫就不會再添加了,如果自己指定_id必須也確保唯一性 db.collection.insertOne():插入一個文檔對象 db.collection.insertMany():插入多個文檔對象

db.piyou.insert({name: "孫悟空", age: 28, address:"花果山"});

/*

表示向 集合名為piyou插入了文檔, 文檔內(nèi)容是對象。

集合名是自己創(chuàng)建的,想用什么名稱就用什么。

*/

db.piyou.insert([

{name:"豬八戒", age: 38, address:"高老莊"},

{name: "沙和尚", age: 45, address:"流沙河"}

]);

/*

可以注意到: 傳遞的數(shù)據(jù)是數(shù)組,數(shù)組內(nèi)部是對象,

其實對象就相當于文檔,這就是插入了兩個文檔。

*/

#添加兩萬條數(shù)據(jù)

for(var i=0;i<20000;i++){

db.users.insert({username:'liu'+i}) #需要執(zhí)行20000次數(shù)據(jù)庫的添加操作

}

db.users.find().count()//20000

#優(yōu)化:

var arr=[];

for(var i=0;i<20000;i++){

arr.push({username:'liu'+i})

}

db.user.insert(arr) #只需執(zhí)行1次數(shù)據(jù)庫的添加操作,可以節(jié)約很多時間

$push:用于向數(shù)組中添加一個新的元素

db.user.update({username:"tangseng"},{$push:{"hobby.movies":"Interstellar"}})

$addToSet:向數(shù)組中添加一個新元素(類似于向set集合中添加,如果數(shù)組中已經(jīng)存在了該元素,則添加失敗,因為不可重復)

db.user.update({username:"tangseng"},{$addToSet:{"hobby.movies":"Interstellar"}})

2、查詢

db.collection.find()

db.collectionName.find() 或db.collectionName.find({})

查詢集合所有的文檔,即所有的數(shù)據(jù)。查詢到的是整個數(shù)組對象。在最外層是有一個對象包裹起來的。db.collectionName.count()或db.collectionName.length() 統(tǒng)計文檔個數(shù) db.collectionName.find({_id:222})

條件查詢。注意:結(jié)果返回的是一個數(shù)組 db.collectionName.findOne() 返回的是查詢到的對象數(shù)組中的第一個對象

注意

> db.students.find({_id:222}).name //錯誤

> db.students.findOne({_id:222}).name //正確

?

# 1.mongodb支持直接通過內(nèi)嵌文檔的屬性值進行查詢

# 什么是內(nèi)嵌文檔:hobby就屬于內(nèi)嵌文檔

{

name:'liu',

hobby:{

movies:['movie1','movie2'],

cities:['zhuhai','chengdu']

}

}

db.users.find({hobby.movies:'movie1'}) //錯誤

db.users.find({"hobby.movies":'movie1'})//此時查詢的屬性名必須加上引號

#2.查詢操作符的使用

#比較操作符

$gt 大于

$gte 大于等于

$lt 小于

$lte 小于等于

$ne 不等于

$eq 等于的另一種寫法

db.users.find({num:{$gt:200}}) #大于200

db.users.find({num:{$gt:200,$lt:300}}) #大于200小于300

$or 或者

db.users.find(

{

$or:[

{num:{$gt:300}},

{num:{$lt:200}}

]

}

) #大于300或小于200

#3.分頁查詢

db.users.find().skip(頁碼-1 * 每頁顯示的條數(shù)).limit(每頁顯示的條數(shù))

db.users.find().limit(10) #前10條數(shù)據(jù)

db.users.find().skip(50).limit(10) #跳過前50條數(shù)據(jù),即查詢的是第61-70條數(shù)據(jù),即第6頁的數(shù)據(jù)

#4.排序

db.emp.find().sort({sal:1}) #1表示升序排列,-1表示降序排列

db.emp.find().sort({sal:1,empno:-1}) #先按照sal升序排列,如果遇到相同的sal,則按empno降序排列

#注意:skip,limit,sort可以以任意的順序調(diào)用,最終的結(jié)果都是先調(diào)sort,再調(diào)skip,最后調(diào)limit

#5.設置查詢結(jié)果的投影,即只過濾出自己想要的字段

db.emp.find({},{ename:1,_id:0}) #在匹配到的文檔中只顯示ename字段

3、修改

# 1.替換整個文檔

# db.collectionName.update(condiction,newDocument)

> db.students.update({_id:'222'},{name:'kang'})

# 2.修改對應的屬性,需要用到修改操作符,比如$set,$unset,$push,$addToSet

db.collectionName.update(

# 查詢條件

{_id:222},

{

#修改對應的屬性

$set:{

name:'kang2',

age:21

}

#刪除對應的屬性

$unset:{

gender:1 //這里的1可以隨便改為其他的值,無影響

}

}

)

# 3.update默認與updateOne()等效,即對于匹配到的文檔只更改其中的第一個

# updateMany()可以用來更改匹配到的所有文檔

db.students.updateMany(

{name:'liu'},

{

$set:{

age:21,

gender:222

}

}

)

# 4.向數(shù)組中添加數(shù)據(jù)

db.users.update({username:'liu'},{$push:{"hobby.movies":'movie4'}})

#如果數(shù)據(jù)已經(jīng)存在,則不會添加

db.users.update({username:'liu'},{$addToSet:{"hobby.movies":'movie4'}})

# 5.自增自減操作符$inc

{$inc:{num:100}} #讓num自增100

{$inc:{num:-100}} #讓num自減100

db.emp.updateMany({sal:{$lt:1000}},{$inc:{sal:400}}) #給工資低于1000的員工增加400的工資

4、刪除

# 1. db.collectionName.remove()

# remove默認會刪除所有匹配的文檔。相當于deleteMany()

# remove可以加第二個參數(shù),表示只刪除匹配到的第一個文檔。此時相當于deleteOne()

db.students.remove({name:'liu',true})

# 2. db.collectionName.deleteOne()

# 3. db.collectionName.deleteMany()

db.students.deleteOne({name:'liu'})

# 4. 刪除所有數(shù)據(jù):db.students.remove({})----性格較差,內(nèi)部是在一條一條的刪除文檔。

# 可直接通過db.students.drop()刪除整個集合來提高效率。

# 5.刪除集合

db.collection.drop()

# 6.刪除數(shù)據(jù)庫

db.dropDatabase()

# 7.注意:刪除某一個文檔的屬性,應該用update。 remove以及delete系列刪除的是整個文檔

# 8.當刪除的條件為內(nèi)嵌的屬性時:

db.users.remove({"hobby.movies":'movie3'})

四、文檔之間的關系

1、一對一(one to one)

在MongoDB中,可以通過內(nèi)嵌文檔的形式來體現(xiàn)出一對一的關系

db.WifeAndHusband.insert([

{

wife:"黃蓉",

husband:{

name:"郭靖"

}

},

{

wife:"潘金蓮",

husband:{

name:"武大郎"

}

}

])

2、一對多(one to many)/ 多對一(many to one)

一對多:父母和孩子、用戶和訂單、文章和評論,也可以通過內(nèi)嵌文檔的方式來映射一對多的關系(將1的那個屬性設置為多的里面的字段)

db.order.insert({

list:["watermelor"],

user_id:ObjectId("5f87b1deda684b252c2fc7a5")

})

var user_id = db.users.findOne({username:"swk"})._id

//查詢孫悟空的訂單

db.order.find({user_id:user_id})

3、多對多(many to many):分類和商品,通過內(nèi)嵌文檔的方式

db.teacher.insert([

{name:"洪七公"},

{name:"黃藥師"},

{name:"龜仙人"}

])

db.stus.insert([

{

name:"郭靖",

tech_ids:[

ObjectId("5f87b4b6da684b252c2fc7a8"),

ObjectId("5f87b4b6da684b252c2fc7a9")

]

},

{

name:"孫悟空",

tech_ids:[

ObjectId("5f87b4b6da684b252c2fc7a8"),

ObjectId("5f87b4b6da684b252c2fc7a9"),

ObjectId("5f87b4b6da684b252c2fc7aa")

]

}

])

練習

//查詢工資小于1000或者大于2000的員工

db.emp.find( $or:[ {sal:{$lt:1000}},{sal:{$gt:2500}} ])

//為所有工資小于1000的增加400

db.emp.find({sal:{$lte:1000}}, {$inc:{$sal:400}})

五、mongoose

1、什么是mongoose

一般我們不會直接用MongoDB的函數(shù)來操作MongoDB數(shù)據(jù)庫 , 而Mongose就是一套操作MongoDB數(shù)據(jù)庫的接口。 簡而言之就是:mongoose也可以操作mongodb數(shù)據(jù)庫,而且它來操作數(shù)據(jù)庫會有更多好處

2、mongoose中的對象:

Schema 模式對象(用于約束文檔的結(jié)構)Model 模型對象(即mongodb中的集合)Document 文檔對象(即mongodb中的文檔)

3、安裝

npm i -s mongoose

4、連接數(shù)據(jù)庫

// 1.引入mongoose

const mongooes = require("mongoose");

// 2.連接mongodb數(shù)據(jù)庫

mongooes.connect("mongodb://localhost/users", {

useNewUrlParser: true,

useUnifiedTopology: true,

});

// 3.監(jiān)聽mongodb數(shù)據(jù)庫的連接狀態(tài)

// 綁定數(shù)據(jù)庫連接成功事件

mongooes.connection.once("open", function () {

console.log("連接成功");

});

// 綁定數(shù)據(jù)庫連接失敗事件

mongooes.connection.once("close", function () {

console.log("數(shù)據(jù)庫連接已經(jīng)斷開");

});

// 4.斷開數(shù)據(jù)庫連接(一般不用)

mongooes.disconnect();

?5、創(chuàng)建模式對象和模型對象

const Schema=mongooes.schema;

//創(chuàng)建模式對象

const stuSchema=new Schema({

name:String,

age:Number,

gender:{

type:String,

default:'female'

},

address:String

})

//創(chuàng)建模型對象

const StuModel=stuSchema.model("student",stuSchema); //第一個參數(shù)表示創(chuàng)建的集合的名稱,第二個參數(shù)表示利用的模式對象

6、利用模型對象進行增刪查改操作

添加

UserModel.create({ user_id: 100, name: "liu1" }, function (err) {

if (!err) {

console.log("插入成功");

} else {

console.log(err);

}

});

let data = [

{ user_id: 101, name: "liu2", age: 22 },

{ user_id: 102, name: "liu3" },

];

UserModel.create(data, function (err) {

console.log(arguments[1]); //第二個值表示的是所添加的文檔對象,是一個數(shù)組

});

查詢

/*

查詢:

model.find(conditions,[projection],[options],callback)

conditions:查詢的條件

projection:投影 { name: 1, gender: 1, _id: 0 } 或 'name gender -_id'

options:查詢選項 { skip: xx, limit: xx }

model.findOne(...)

model.findById(...)

model.countDocuments(conditions,callback) 查詢文檔的數(shù)量

*/

UserModel.find({}, function (err, data) {

console.log(data);

});

UserModel.find(

{ name: /liu/i },

"name gender -_id",

{ skip: 2, limit: 1 },

function (err, data) {

console.log(data); //返回的是一個文檔對象數(shù)組

}

);

UserModel.findById("5f9fbfba14319e492c0f5bc4", function (err, data) {

console.log(data);

console.log(data instanceof UserModel); //true 返回的文檔對象屬于模型對象(即集合)的實例對象

});

UserModel.countDocuments({}, function (err, data) {

console.log(data);

});

刪除

/*

刪除:

model.remove(conditions,callback)

model.deleteOne(...)

model.deleteMany(...)

*/

UserModel.remove(

{

name: "liu2",

},

function (err, data) {

console.log("刪除成功");

}

);

UserModel.find({}, function (err, data) {

console.log(data);

});

修改

/* 修改:

model.update(conditions,[doc],[options],callback)

doc:修改后的文檔對象

model.updateMany(...)

model.uodateOne(...)

*/

UserModel.updateOne({ name: "liu1" }, { $set: { age: 22 } }, function (

err,

data

) {

if (!err) {

console.log("修改成功");

}

});

UserModel.find({ name: "liu1" }, function (err, data) {

console.log(data);

});

7、模塊化處理

單獨創(chuàng)建一個數(shù)據(jù)庫連接文件dbconncet.js

const mongooes = require("mongoose");

mongooes.connect("mongodb://localhost/mongooes_test", {

useNewUrlParser: true,

useUnifiedTopology: true,

});

mongooes.connection.once("open", function () {

console.log("連接成功");

});

為每一個集合創(chuàng)建一個模型對象文件xxxModel.js

const mongooes = require("mongoose");

const Schema = mongooes.Schema;

const userSchema = new Schema({

user_id: String,

name: String,

age: Number,

gender: {

type: Number,

default: 0,

},

});

const UserModel = mongooes.model("user", userSchema);

module.exports = UserModel;

在最終的文件index.js中引入數(shù)據(jù)庫連接文件和創(chuàng)建模型的文件

const mongooes = require("./dbconncet");

const PostModel = require("./models/postModel");

PostModel.findOne({}, function (err, data) {

if (!err) {

console.log(data);

}

});

柚子快報邀請碼778899分享:mongodb數(shù)據(jù)庫使用

http://yzkb.51969.com/

相關閱讀

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權,聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19319924.html

發(fā)布評論

您暫未設置收款碼

請在主題配置——文章設置里上傳

掃描二維碼手機訪問

文章目錄