最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Node.js對(duì)MongoDB進(jìn)行增刪改查操作的實(shí)例代碼

 更新時(shí)間:2019年04月18日 10:11:51   作者:皮蛋哥  
這篇文章主要介紹了Node.js對(duì)MongoDB進(jìn)行增刪改查操作 ,需要的朋友可以參考下

MongoDB簡(jiǎn)介

MongoDB是一個(gè)開源的、文檔型的NoSQL數(shù)據(jù)庫程序。MongoDB將數(shù)據(jù)存儲(chǔ)在類似JSON的文檔中,操作起來更靈活方便。NoSQL數(shù)據(jù)庫中的文檔(documents)對(duì)應(yīng)于SQL數(shù)據(jù)庫中的一行。將一組文檔組合在一起稱為集合(collections),它大致相當(dāng)于關(guān)系數(shù)據(jù)庫中的表。

除了作為一個(gè)NoSQL數(shù)據(jù)庫,MongoDB還有一些自己的特性:

•易于安裝和設(shè)置
•使用BSON(類似于JSON的格式)來存儲(chǔ)數(shù)據(jù)
•將文檔對(duì)象映射到應(yīng)用程序代碼很容易
•具有高度可伸縮性和可用性,并支持開箱即用,無需事先定義結(jié)構(gòu)
•支持MapReduce操作,將大量數(shù)據(jù)壓縮為有用的聚合結(jié)果
•免費(fèi)且開源
•......

連接MongoDB

在Node.js中,通常使用Mongoose庫對(duì)MongoDB進(jìn)行操作。Mongoose是一個(gè)MongoDB對(duì)象建模工具,設(shè)計(jì)用于在異步環(huán)境中工作。

const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost/playground')
  .then(() => console.log('Connected to MongoDB...'))
  .catch( err => console.error('Could not connect to MongoDB... ', err));

Schema

Mongoose中的一切都始于一個(gè)模式。每個(gè)模式都映射到一個(gè)MongoDB集合,并定義該集合中文檔的形狀。

Schema類型

const courseSchema = new mongoose.Schema({
  name: String,
  author: String,
  tags: [String],
  date: {type: Date, default: Date.now},
  isPublished: Boolean
});

Model

模型是根據(jù)模式定義編譯的構(gòu)造函數(shù),模型的實(shí)例稱為文檔,模型負(fù)責(zé)從底層MongoDB數(shù)據(jù)庫創(chuàng)建和讀取文檔。

const Course = mongoose.model('Course', courseSchema);
const course = new Course({
  name: 'Nodejs Course',
  author: 'Hiram',
  tags: ['node', 'backend'],
  isPublished: true
});

新增(保存)一個(gè)文檔

async function createCourse(){
  const course = new Course({
    name: 'Nodejs Course',
    author: 'Hiram',
    tags: ['node', 'backend'],
    isPublished: true
  });
  
  const result = await course.save();
  console.log(result);
}

createCourse();

查找文檔

async function getCourses(){
  const courses = await Course
    .find({author: 'Hiram', isPublished: true})
    .limit(10)
    .sort({name: 1})
    .select({name: 1, tags:1});
  console.log(courses);
}
getCourses();

使用比較操作符

比較操作符

async function getCourses(){
  const courses = await Course
    // .find({author: 'Hiram', isPublished: true})
    // .find({ price: {$gt: 10, $lte: 20} })
    .find({price: {$in: [10, 15, 20]} })
    .limit(10)
    .sort({name: 1})
    .select({name: 1, tags:1});
  console.log(courses);
}
getCourses();

使用邏輯操作符

•or (或) 只要滿足任意條件
•and (與) 所有條件均需滿足

async function getCourses(){
  const courses = await Course
    // .find({author: 'Hiram', isPublished: true})
    .find()
    // .or([{author: 'Hiram'}, {isPublished: true}])
    .and([{author: 'Hiram', isPublished: true}])
    .limit(10)
    .sort({name: 1})
    .select({name: 1, tags:1});
  console.log(courses);
}
getCourses();

使用正則表達(dá)式

async function getCourses(){
  const courses = await Course
    // .find({author: 'Hiram', isPublished: true})
    //author字段以“Hiram”開頭
    // .find({author: /^Hiram/})
    //author字段以“Pierce”結(jié)尾
    // .find({author: /Pierce$/i })
    //author字段包含“Hiram”
    .find({author: /.*Hiram.*/i })
    .limit(10)
    .sort({name: 1})
    .select({name: 1, tags:1});
  console.log(courses);
}
getCourses();

使用count()計(jì)數(shù)

async function getCourses(){
  const courses = await Course
    .find({author: 'Hiram', isPublished: true})
    .count();
  console.log(courses);
}
getCourses();

使用分頁技術(shù)

通過結(jié)合使用 skip() 及 limit() 可以做到分頁查詢的效果

async function getCourses(){
  const pageNumber = 2;
  const pageSize = 10;
  const courses = await Course
    .find({author: 'Hiram', isPublished: true})
    .skip((pageNumber - 1) * pageSize)
    .limit(pageSize)
    .sort({name: 1})
    .select({name: 1, tags: 1});
  console.log(courses);
}
getCourses();

更新文檔

先查找后更新

async function updateCourse(id){
  const course = await Course.findById(id);
  if(!course) return;
  course.isPublished = true;
  course.author = 'Another Author';
  const result = await course.save();
  console.log(result);
}

直接更新

async function updateCourse(id){
  const course = await Course.findByIdAndUpdate(id, {
    $set: {
      author: 'Jack',
      isPublished: false
    }
  }, {new: true}); //true返回修改后的文檔,false返回修改前的文檔
  console.log(course);
}

MongoDB更新操作符,請(qǐng)參考:https://docs.mongodb.com/manual/reference/operator/update/

刪除文檔

•deleteOne 刪除一個(gè)
•deleteMany 刪除多個(gè)
•findByIdAndRemove 根據(jù)ObjectID刪除指定文檔

async function removeCourse(id){
  // const result = await Course.deleteMany({ _id: id});
  const course = await Course.findByIdAndRemove(id);
  console.log(course)
}

總結(jié)

以上所述是小編給大家介紹的Node.js對(duì)MongoDB進(jìn)行增刪改查操作的實(shí)例代碼,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

最新評(píng)論

科技| 资兴市| 浑源县| 鹿泉市| 芦山县| 水富县| 阳信县| 广安市| 巫溪县| 民丰县| 锡林郭勒盟| 佛坪县| 西青区| 元江| 寿阳县| 长宁区| 马尔康县| 大安市| 寿宁县| 台南县| 宣武区| 上虞市| 鄂温| 阿合奇县| 保定市| 博乐市| 绿春县| 内丘县| 莱芜市| 武城县| 龙江县| 布拖县| 遂昌县| 马边| 景德镇市| 高州市| 泰州市| 墨玉县| 锡林浩特市| 孟津县| 于都县|