MongoDB+NodeJS(CRUD) 系列详细图解

NodeJS安装MongoDB

MongoDB客户端

NoSQL Manager for MongoDB
(默认端口27017)
在这里插入图片描述

创建数据库

创建 blog 数据库,但是刚刚创建的数据库由于没有数据并不会在这里显示

use blog;
db;
show dbs;
//删除数据库
db.dropDatabase();

插入数据

db.blog.insert({'id':1,'name':'123'});
show dbs;

建表

use blog;
show collections;
db.createCollection("mytest");
show collections;
//删表
db.mytest.drop();

查询数据

use blog;
db.blog.find();

mongodb驱动程序和Mongoose模块

cnpm install mongodb -g
cnpm install mongoose -g

NodeJS操作mongodb

var MongoClient = require('mongodb').MongoClient;
var request = require('request');
var cheerio = require('cheerio');
var path = require('path');
var fs = require('fs');
var filenames=new Array();
var keywords='singerurl';
//mongodb连接字符串
var DB_URL = 'mongodb://localhost:27017/';
//测试插入数据
dbclient(DB_URL,'nebulae','astro',function(db,client0){
    console.log('client0 connect DB finished ')
    var data={
        "singername" : "姜潮",
        "singerurl" : "http://www.kugou.com/yy/singer/home/89163.html"
    }
    var  data1 =[{
        "singername" : "帆乃佳",
        "singerurl" : "http://www.kugou.com/yy/singer/home/304438.html"
    },{
        "singername" : "柏木由紀",
        "singerurl" : "http://www.kugou.com/yy/singer/home/95002.html"
    }]
    insertOneData(db,data);
    console.log('insert one data finished')
    // insertManyData(db,data1,function(callback){
    //     console.log('Insert many data finished')
    // });
    client0.close()
    console.log('client0 close')
});
//测试更新数据
dbclient(DB_URL,'nebulae','astro',function(db,client1){
    console.log('client1 connect DB finished ')
    var urllist=[]
    var datalist=[]
    findkeyData(db,keywords,function(keylist,alllist){
        console.log('find data finished');
        console.log('data.length is :%d ',alllist.length);
        /*
         for(let item in alllist){
         console.log(alllist[item])
         console.log(item)
         }
         */
        //console.log('keylist[1]=[%s],alllist[1]=[%s]',keylist[1],alllist[1])
        urllist=keylist
        datalist=alllist
        for(var i in keylist )
        {
            var tmpa={'singerurl':keylist[i]}
            alllist[i].a=['new_item','test_'+i]
            delete alllist[i]._id        //更新数据的时候,因为_id是唯一的,所以不能把这个字段带上
            //console.log(tmpa)
            //console.log(alllist[i])
            updateKeyData(db,tmpa,alllist[i],function (callback){
                console.log('update  data finished');
            })
        }
        console.log('this is find finished')
        client1.close()
    });
    console.log('client1 close')
});
/**
 * 连接mongodb
 * @param host  连接字符串
 * @param collections  表
 * @param dbs  数据库
 * @param callback
 */
function dbclient(host,collections,dbs,callback){
    MongoClient.connect(host,{useUnifiedTopology:true,useNewUrlParser:true},function(err, client) {
        var collect=client.db(collections)
        var db = collect.collection(dbs);
        console.log('连接 %s 成功,set collection[%s] and db[%s] finished',host,collections,dbs)
        callback(db,client)
    });
}
/**
 * 定义函数表达式,用于操作数据库并返回结果,插入一条数据
 * @param db
 * @param data
 */
var insertOneData = function(db, data) {
    db.insertOne(data, function(err, result){
        if(err){
            //如果存在错误
            console.log('Error:'+ err);
            return;
        }else{
            console.log('One date be insert finished')
        }
    });
}
/**
 * 插入多条数据
 * @param db
 * @param data
 */
var insertManyData = function(db, data,callback) {
    db.insertMany(data, function(err, result) {
        //如果存在错误
        if(err)
        {
            console.log('Error:'+ err);
            return;
        }else{
            //调用传入的回调方法,将操作结果返回
            //console.log(result)
            callback(result);
        }
    });
}
/**
 * 更新数据
 * @param db
 * @param olddata
 * @param newdata
 * @param callback
 */
var updateKeyData = function(db, olddata,newdata,callback) {
    //获得指定的集合
    //要修改数据的条件,>=10岁的用户
    //var  where={age:{"$gte":10}};
    //要修改的结果
    console.log(olddata)
    console.log(newdata)
    var set={$set:newdata};
    db.updateMany(olddata,set, function(err, result) {
        //如果存在错误
        if(err)
        {
            console.log('Error:'+ err);
            return;
        }else{
            //调用传入的回调方法,将操作结果返回
            callback(result);
        }
    });
}
/**
 * 更新数据
 * @param db
 * @param callback
 */
var updateData = function(db, callback) {
    //获得指定的集合
    var collection = db.collection('users');
    //要修改数据的条件,>=10岁的用户
    var  where={age:{"$gte":10}};
    //要修改的结果
    var set={$set:{age:95}};
    collection.updateMany(where,set, function(err, result) {
        //如果存在错误
        if(err)
        {
            console.log('Error:'+ err);
            return;
        }
        //调用传入的回调方法,将操作结果返回
        callback(result);
    });
}
/**
 * 所有数据中获取指定元素数据
 * @param db
 * @param keyword
 * @param callback
 */
var findkeyData = function(db,keyword,callback) {
    var keyvalue=[]
    var allvalue=[]
    db.find().toArray(function(err, result) {
        //如果存在错误
        if(err){
            console.log('Error:'+ err);
            return;
        }else{
            result.forEach(function(val){
                for(let item in val){
                    if(item == keyword){
                        console.log(val[item]);
                        //console.log(val);
                        keyvalue.push(val[item]);
                        allvalue.push(val);
                    }
                }
            });
        }
        console.log('get keyvalue list finished');
        //console.log(allvalue);
        callback(keyvalue,allvalue);
    });
}
/**
 * 查询数据
 * @param db
 * @param callback
 */
var findAllData = function(db,callback) {
    db.find().toArray(function(err, result) {
        //如果存在错误
        if(err)
        {
            console.log('Error:'+ err);
            return;
        }
        callback(result);
    });
}
/**
 * 删除数据
 * @param db
 * @param callback
 */
var removeData = function(db, callback) {
    //获得指定的集合
    var collection = db.collection('users');
    //要删除数据的条件,_id>2的用户删除
    var  where={_id:{"$gt":2}};
    collection.remove(where,function(err, result) {
        //如果存在错误
        if(err)
        {
            console.log('Error:'+ err);
            return;
        }
        //调用传入的回调方法,将操作结果返回
        callback(result);
    });
}

结果

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值