日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

nodejs操作mongodb增删改查

發布時間:2023/12/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nodejs操作mongodb增删改查 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. Mac系統上安裝

使用Homebrew安裝

$ brew updata // 更新Homebrew的package數據庫 $ brew install mongodb

2. 啟動MongoDB

$mongod --config /usr/local/etc/mongod.conf // sudo mongod

3. 使用MongoDB shell

$ mongo

MongoDB是什么?

MongoDB是一個基于分布式文件存儲的數據庫。由C++語言編寫。旨在為WEB應用提供可擴展的高性能數據存儲解決方案。?
特點是:?
高性能、易部署、易使用、存儲數據方便

MongoDB概念

SQLMongoDB解釋
databasedatabase數據庫
tablecollection數據庫表/集合
rowdocument數據記錄行/文檔
columnfield數據字段/域
indexindex索引
table joins?表連接,MongoDB不支持
primary keyprimary key主鍵,MongoDB自動將_id字段設置為主鍵

1. 數據庫

  • 一個mongodb中可以建立多個數據庫
  • MongoDB的默認數據庫為“db”,該數據庫存儲在data目錄中。
  • MongoDB的單個實例可以容納多個獨立的數據庫,每一個都有自己的集合和權限,不同的數據庫也放置在不同的文件中
show dbs 列出所有數據庫 db //顯式當前使用的數據庫 use xxx 切換數據庫

數據庫的命名:通過標識符,使用utf8字符串

  • 非空
  • 不允許出現特殊字符$,/
  • 全部小寫,最多64個字節
  • 有一些特殊保留數據庫,如local、admin、config,命名時避免使用

2. 文檔

文檔是一個鍵值(key-value)對(即BSON)。MongoDB的文檔不需要設置相同的字段,并且相同的字段不需要相同的數據類型,這與關系型數據庫有很大的區別,也是MongoDB非常突出的特點。

3. 集合

集合就是 MongoDB文檔組,類似于RDBMS(關系型數據庫管理系統)中的表格。?
集合存在于數據庫中,集合沒有固定的結構,這意味著對集合可以插入不同格式和類型的數據,但通常情況下我們插入的數據都會有一定的關聯性。

結合的命名

  • 不能是空字符串
  • 不允許出現- 0
  • 不能以system.開頭,這是系統保留的前綴
  • 不能包含保留字,$

4.MongoDB數據類型

類型描述
null用于表示空值或者不存在的字段{“x”,null}
布爾‘true’和’false’{“x”,true}
32位整數Shell中這個類型不可用,MongoDB在控制臺使用JS引擎進行輸入,而JS僅支持64位浮點數,所以32位整數將會被自動轉義
64位整數Shell中這個類型不可用, 64位整數與32位整數一樣,在MongoDB控制臺使用時,會轉義成64位浮點數
64位浮點數Shell中的數字都是這種類型,下面是浮點數{“x”:3.14}、{“x”:3}
字符串UTF-8字符串都可表示為字符串類型的數據{“x”:”foobar”}
符號Shell不支持這種類型,將自動轉義成字符串
對象ID對象id是文檔的12字節的唯一ID,時間戳
日期日期類型存儲的是從標準紀元開始的毫秒數{“x”:new Date()}
正則表達式文檔中可以包含正則表達式,其正則表達式采用JS語法來表示{“x”:/foobar/i}
代碼文檔中可以包含js代碼{“x”:function(){…}}
二進制數據二進制數據可以由任意字節的串組成,不過Shell無法使用
最大值BSON包括一個特殊類型,表示可能的最大值Shell無法使用
最小值BSON包括一個特殊類型,表示可能的最小值Shell無法使用
未定義文檔中也可以使用未定義類型{“x”:undefined}
數組值的集合或者列表可以表示成數組{“x”:[“a”,”b”,”c”]}
內嵌文檔文檔可以包含別的文檔{“x”:{“foo”:”bar”}}

MongoDB操作

1. 數據庫常用命名

  • Help查看提示命令?
    help?
    • db.help()
    • db.test.help()
    • db.test.find().help()
  • 創建/切換數據庫?
    • use music
  • 查詢數據庫?
    • show dbs
  • 查看當前使用的數據庫?
    • db/db.getName()
  • 顯示當前DB狀態?
    • db.stats()
  • 查看當前DB版本?
    • db.version()
  • 查看當前DB的鏈接機器地址?
    • db.getMongo()
  • 刪除數據庫?
    • db.dropDatabase()
  • 2. shell操作數據庫

    > use music switched to db music > show dbs // 當前列表里沒有music數據庫,因為沒有數據 > db.albums.insertOne({'title':'生命之花'}) {"acknowledged" : true,"insertedId" : ObjectId("591b158a71d7222a7a0d7f60") } > db.albums.find() { "_id" : ObjectId("591b158a71d7222a7a0d7f60"), "title" : "生命之花" } > show dbs //插入數據后,有music數據庫 music 0.000GB > db music > db.getName() music > db.stats() {"db" : "music","collections" : 1,"views" : 0,"objects" : 1,"avgObjSize" : 46,"dataSize" : 46,"storageSize" : 16384,"numExtents" : 0,"indexes" : 1,"indexSize" : 16384,"ok" : 1 } > db.version() 3.4.3 > db.getMongo() connection to 127.0.0.1:27017 > db.dropDatabase() //刪除數據庫 { "dropped" : "music", "ok" : 1 }

    Collection 聚集集合操作

    1. 創建一個聚集集合

    db.createCollection(“collName”, {size: 20, capped: true, max: 100});?
    db.collName.isCapped(); //判斷集合是否為定容量

    > db.createCollection('albums',{size:20,capped:true,max:100}) { "ok" : 1 }

    capped:true 將集合固定大小,可以提高訪問數據庫的效率,插入數據時,會自動進行順序管理

    > db.albums.isCapped() //判斷集合是否為定容量 true

    size的優先級大于max

    2. 得到指定名稱的聚集集合

    > db.getCollection('albums') music.albums

    3. 得到當前db的所有聚集集合

    > db.getCollectionNames() [ "albums" ]

    4. 顯示當前db所有聚集的狀態

    db.printCollectionStats()

    添加、修改與刪除集合數據

    1. 添加

    > db.albums.insertOne({title:'生命之花'}) > db.albums.insertMany([{title:'再見理想'},{title:'飛船'}]) > db.albums.insert([{title:'光輝歲月'},{title:'hello'}]) > db.albums.save({title:'21'})

    2. 修改

    修改所有數據

    db.albums.updateMany({},{$set:{artist:'adele'}}) > db.albums.find() { "_id" : ObjectId("591b1d7871d7222a7a0d7f61"), "title" : "生命之花", "artist" : "adele" } { "_id" : ObjectId("591b1e0071d7222a7a0d7f62"), "title" : "再見理想", "artist" : "adele" } { "_id" : ObjectId("591b1e0071d7222a7a0d7f63"), "title" : "飛船", "artist" : "adele" } { "_id" : ObjectId("591b1eac71d7222a7a0d7f64"), "title" : "光輝歲月", "artist" : "adele" } { "_id" : ObjectId("591b1eac71d7222a7a0d7f65"), "title" : "hello", "artist" : "adele" } { "_id" : ObjectId("591b1ee971d7222a7a0d7f66"), "title" : "21", "artist" : "adele" }

    修改一條數據

    >db db.albums.updateMany({title:'光輝歲月'},{$set:{artist:'Beyond'}}) { "_id" : ObjectId("591b1eac71d7222a7a0d7f64"), "title" : "光輝歲月", "artist" : "Beyond" }

    3. 刪除

    刪除一條記錄

    > db.albums.deleteOne({artist:'adele'}) { "acknowledged" : true, "deletedCount" : 1 } > db.albums.remove({artist:'adele'},true) WriteResult({ "nRemoved" : 1 })

    刪除多條記錄

    > db.albums.deleteMany({artist:'adele'}) { "acknowledged" : true, "deletedCount" : 3 } > db.albums.remove({}) WriteResult({ "nRemoved" : 1 })

    4. 查詢修改刪除

    db.users.findAndModify({query: {age: {$gte: 25}}, sort: {age: -1}, update: {$set: {name: 'a2'}, $inc: {age: 2}},remove: true }); db.runCommand({ findandmodify : "users", query: {age: {$gte: 25}}, sort: {age: -1}, update: {$set: {name: 'a2'}, $inc: {age: 2}},remove: true }); 參數詳解詳解
    query查詢過濾條件{}
    sort如果多個文檔符合查詢過濾條件,將以該參數指定的排列方式選擇出排在首位的對象,該對象將被操作{}
    remove若為true,被選中對象將在返回前被刪除N/A
    update一個 修改器對象N/A
    new若為true,將返回修改后的對象而不是原始對象。在刪除操作中,該參數被忽略。FALSE
    upsert創建新對象若查詢結果為空FALSE

    聚集集合查詢

    1. 查詢所有記錄

    db.userInfo.find();?
    相當于:select* from userInfo;

    2.查詢去重后數據

    db.userInfo.distinct(“name”);?
    相當于:select distict name from userInfo;

    3. 查詢age = 22的記錄

    db.userInfo.find({“age”: 22});?
    相當于: select * from userInfo where age = 22;

    4. 查詢age > 22的記錄

    db.userInfo.find({age: {$gt: 22}});?
    相當于:select * from userInfo where age >22;

    5. 查詢age < 22的記錄

    db.userInfo.find({age: {$lt: 22}});?
    相當于:select * from userInfo where age <22;

    6. 查詢age >= 25的記錄

    db.userInfo.find({age: {$gte: 25}});?
    相當于:select * from userInfo where age >= 25;

    7. 查詢age <= 25的記錄

    db.userInfo.find({age: {$lte: 25}});

    8. 查詢age >= 23 并且 age <= 26

    db.userInfo.find({age: {gte:23,gte:23,lte: 26}});?
    查詢name中包含 mongo的數據

    9. db.userInfo.find({name: /mongo/});

    //相當于%%?
    select * from userInfo where name like ‘%mongo%’;

    10. 查詢name中以mongo開頭的

    db.userInfo.find({name: /^mongo/});?
    select * from userInfo where name like ‘mongo%’;

    11. 查詢指定列name、age數據

    db.userInfo.find({}, {name: 1, age: 1}); // 只訪問name和age兩列的內容,1位標識?
    相當于:select name, age from userInfo;

    12. 查詢指定列name、age數據, age > 25

    db.userInfo.find({age: {$gt: 25}}, {name: 1, age: 1});?
    相當于:select name, age from userInfo where age >25;

    13. 按照年齡排序

    升序:db.userInfo.find().sort({age: 1}); // 1 為標識,升序?
    降序:db.userInfo.find().sort({age: -1}); // -1 為標識,降序

    14.查詢name = zhangsan, age = 22的數據

    db.userInfo.find({name: ‘zhangsan’, age: 22});?
    相當于:select * from userInfo where name = ‘zhangsan’ and age = ’22’;

    15.查詢前5條數據

    db.userInfo.find().limit(5);?
    相當于:select top 5 * from userInfo;

    16. 查詢10條以后的數據

    db.userInfo.find().skip(10);?
    相當于:select * from userInfo where id not in (?
    select top 10 * from userInfo?
    );

    17. 查詢在5-10之間的數據

    db.userInfo.find().limit(10).skip(5);

    18. or與 查詢

    db.userInfo.find({$or: [{age: 22}, {age: 25}]});?
    相當于:select * from userInfo where age = 22 or age = 25;

    19. 查詢第一條數據

    db.userInfo.findOne();?
    相當于:selecttop 1 * from userInfo;?
    db.userInfo.find().limit(1);

    20. 查詢某個結果集的記錄條數

    db.userInfo.find({age: {$gte: 25}}).count();?
    相當于:select count(*) from userInfo where age >= 20;

    21. 按照某列進行排序

    db.userInfo.find({sex: {$exists: true}}).count();?
    相當于:select count(sex) from userInfo;

    聚集集合查詢shell 操作

    https://api.douban.com/v2/movie/top250獲取豆瓣電影數據?
    將”subjects”:的數據插入到db.movie.insertMany()中,再寫入到數據庫

    #

    db.movie.find({year:'1994'},{title:1, year:1}) { "_id" : ObjectId("591b296971d7222a7a0d7f67"), "title" : "肖申克的救贖", "year" : "1994" } { "_id" : ObjectId("591b296971d7222a7a0d7f68"), "title" : "這個殺手不太冷", "year" : "1994" } { "_id" : ObjectId("591b296971d7222a7a0d7f6a"), "title" : "阿甘正傳", "year" : "1994" }

    若不顯示_id字段內容

    > db.movie.find({year:'1994'},{title:1, year:1, _id:0}) { "title" : "肖申克的救贖", "year" : "1994" } { "title" : "這個殺手不太冷", "year" : "1994" } { "title" : "阿甘正傳", "year" : "1994" }

    顯式title,year和rating.averag

    db.movie.find({},{title:1, year:1, 'rating.average':1, _id:0}) { "rating" : { "average" : 9.6 }, "title" : "肖申克的救贖", "year" : "1994" } { "rating" : { "average" : 9.4 }, "title" : "這個殺手不太冷", "year" : "1994" } { "rating" : { "average" : 9.5 }, "title" : "霸王別姬", "year" : "1993" } { "rating" : { "average" : 9.4 }, "title" : "阿甘正傳", "year" : "1994" } { "rating" : { "average" : 9.5 }, "title" : "美麗人生", "year" : "1997" } { "rating" : { "average" : 9.2 }, "title" : "千與千尋", "year" : "2001" } { "rating" : { "average" : 9.4 }, "title" : "辛德勒的名單", "year" : "1993" } { "rating" : { "average" : 9.2 }, "title" : "泰坦尼克號", "year" : "1997" } { "rating" : { "average" : 9.2 }, "title" : "盜夢空間", "year" : "2010" } { "rating" : { "average" : 9.3 }, "title" : "機器人總動員", "year" : "2008" } { "rating" : { "average" : 9.2 }, "title" : "海上鋼琴師", "year" : "1998" } { "rating" : { "average" : 9.1 }, "title" : "三傻大鬧寶萊塢", "year" : "2009" } { "rating" : { "average" : 9.2 }, "title" : "忠犬八公的故事", "year" : "2009" } { "rating" : { "average" : 9.2 }, "title" : "放牛班的春天", "year" : "2004" } { "rating" : { "average" : 9.2 }, "title" : "大話西游之大圣娶親", "year" : "1995" } { "rating" : { "average" : 9.2 }, "title" : "教父", "year" : "1972" } { "rating" : { "average" : 9.1 }, "title" : "龍貓", "year" : "1988" } { "rating" : { "average" : 9 }, "title" : "楚門的世界", "year" : "1998" } { "rating" : { "average" : 9.2 }, "title" : "亂世佳人", "year" : "1939" } { "rating" : { "average" : 9.1 }, "title" : "天堂電影院", "year" : "1988" }

    符合條件的條數

    db.movie.find({},{title:1, year:1, 'rating.average':1, _id:0}).size() 20

    limit 顯式指定數目

    > db.movie.find({},{title:1, year:1, 'rating.average':1, _id:0}).limit(5) { "rating" : { "average" : 9.6 }, "title" : "肖申克的救贖", "year" : "1994" } { "rating" : { "average" : 9.4 }, "title" : "這個殺手不太冷", "year" : "1994" } { "rating" : { "average" : 9.5 }, "title" : "霸王別姬", "year" : "1993" } { "rating" : { "average" : 9.4 }, "title" : "阿甘正傳", "year" : "1994" } { "rating" : { "average" : 9.5 }, "title" : "美麗人生", "year" : "1997" }

    skip 跳過制定數的數據

    > db.movie.find({},{title:1, year:1, 'rating.average':1, _id:0}).skip(15) { "rating" : { "average" : 9.2 }, "title" : "教父", "year" : "1972" } { "rating" : { "average" : 9.1 }, "title" : "龍貓", "year" : "1988" } { "rating" : { "average" : 9 }, "title" : "楚門的世界", "year" : "1998" } { "rating" : { "average" : 9.2 }, "title" : "亂世佳人", "year" : "1939" } { "rating" : { "average" : 9.1 }, "title" : "天堂電影院", "year" : "1988" }

    limit和skip 3-5條數據

    > db.movie.find({},{title:1, year:1, 'rating.average':1, _id:0}).skip(2).limit(3) { "rating" : { "average" : 9.5 }, "title" : "霸王別姬", "year" : "1993" } { "rating" : { "average" : 9.4 }, "title" : "阿甘正傳", "year" : "1994" } { "rating" : { "average" : 9.5 }, "title" : "美麗人生", "year" : "1997" }

    sort 排序 1 為升序,-1為降序

    > db.movie.find({},{title:1, year:1, 'rating.average':1, _id:0}).sort({'rating.average':1})

    條件查詢

    > db.movie.find({'rating.average':{$gt:9.4}},{title:1, 'rating.average':1, _id:0}) { "rating" : { "average" : 9.6 }, "title" : "肖申克的救贖" } { "rating" : { "average" : 9.5 }, "title" : "霸王別姬" } { "rating" : { "average" : 9.5 }, "title" : "美麗人生" }

    按指定內容查詢

    > db.movie.find({genres:{$in:['犯罪']}},{title:1, genres:1, _id:0}) { "genres" : [ "犯罪", "劇情" ], "title" : "肖申克的救贖" } { "genres" : [ "劇情", "動作", "犯罪" ], "title" : "這個殺手不太冷" } { "genres" : [ "劇情", "犯罪" ], "title" : "教父" }

    node中使用MongoDB

    var mongodb = require('mongodb')// 創建數據庫的連接var server = new mongodb.Server('localhost',27017,{auto_reconnect:true} )// 創建數據的連接 var db = new mongodb.Db('movies',server,{safe: true} )// 測試數據庫連接 db.open(function(err, db){if (err){console.log('log-'+ err)} else {console.log('log-connect mongodb success')db.collection('movie', {safe: true}, function(err, conn){if (err){console.log(err)} else {conn.find({}, {title:1, year:1, _id:0}).limit(3).skip(3).toArray(function(err, res){if(!err){res.forEach(function(value){console.log(value.title)})}})}})} }) //打印結果 //阿甘正傳 //美麗人生 //千與千尋

    ?

    總結

    以上是生活随笔為你收集整理的nodejs操作mongodb增删改查的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。