数据库
-数据库的服务器:用来保存数据
-数据库的客户端:对数据进行增删改
启动服务器后,才用客户端连接数据库
可将数据库设置为系统服务(开机自启动)自己百度
数据库备份代码:mongodump -h 127.0.0.1 -d WebSql -o Desktop
mongo数据库讲解
数据库 放n个数据库(database)
集合 数据库,可放n个集合(collection)
文档 集合里可放多个文档(操作的为文档)(document)
在mongodb中,数据库和集合不需要手动创建
创建文档时,文档所在的集合和数据库不存在,如果不存在会自动创建数据库和集合
mongod 动mongod服务器 (关闭cmd窗口后服务器关闭,选中后服务停止)
mongo 启动客户端
--dbpath 路径 (设置数据库文件保存路径)
--port 数字 (设置端口号)4位以上 最大不能超过65535
显示所有数据库
show dbs (查看有多少数据库)
show databases
show collections (看数据库有几个集合)
进入某个数据库
use 数据库名 (进入到某个数据库中)
db (当前的数据库)
数据库的增删改
增添数据
db.<集合的名>.insert(doc) (向集合中插入一个或多个文档)
db.<stus>.insert({name:"zhangsan",age:18,gender:"male"});
db.<stus>.insert
([
{name:"张三",age:15},
{name:"张三",age:15},
{name:"张三",age:15}
])
插入一个文档对象
db.<>.insertOne()
插入多个文档对象
db.<>.insertMany()
查询数据
db.<集合的名>.find() (查询当前集合的所有文档)
db.<stus>.find()
查询数据
//查询最新的一条数据在数据库最下方
db.username.find().sort({_id:-1}).limit(1);
删除数据文档
db.<集合的名>.remove() 删除符合条件的所有数据,若第二个参数为ture则只删除一个
如果不传递任何参数,则为清空集合
db.<集合>.drop() 删除整个集合
db.<集合的名>.deleteOne() 删除一条数据
db.<集合的名>.deleteMany() 删除多条数据
db.dropDatabase() 删除整个数据库
db.stus.remove({_id:"hello"},ture) //删除id为hello
db.stus.drop()
数据库的修改
db.WebAnimation.update({id:"Top2"},{"$set":{"name":"XXX"}})
数据库添加列
db.getCollection('WebAnimation').update({}, {$set: {content:14}}, {multi: 1})
db.getCollection('WebAnimation').update({}, {$set: {beizhu:14}}, {beizh: 1})
数据库添加时间列
db.Webchat.insert
([
{username:"张三",chat:"sfdfs",time:ISODate("2020-02-20T15:42:33.303Z")},
{username:"张三",chat:"sfdd",time:ISODate("2020-02-20T15:43:33.303Z")},
{username:"张三",chat:"efsad",time:ISODate("2020-02-20T15:45:33.303Z")}
])
数据库添加时自增
db.getCollection("A表").update(
{ id: 1 },
{ $inc: { pid: 1} }
)
数据库整数类型查询
db.username.find({'$where':'this.number>1'})
数据库时间类型查询
db.Webchat.find({"time":{"$gt":ISODate("2020-02-20T15:42:33.303Z")}})
查询字符串
db.Double.find({'$where':'this.timeString==20200315105116'})
nodejs向mongodb数据库修改数据
Double.updateMany({Doublename:linshi},{$inc:{DegreeHeat:1}},function(err,results){
if (!err){
console.log(results.result.ok);
console.log("添加成功");
}else{
console.log("添加失败");
}
});
关联查询:db.product.aggregate([
{
$lookup:
{
from: "orders",
localField: "_id",
foreignField: "pid",
as: "inventory_docs"
}
}
])
$lookup:
db.product.insert({"_id":1,"productname":"商品1","price":15})
db.product.insert({"_id":2,"productname":"商品2","price":36})
db.orders.insert({"_id":1,"pid":1,"ordername":"订单1"})
db.orders.insert({"_id":2,"pid":2,"ordername":"订单2"})
db.orders.insert({"_id":3,"pid":2,"ordername":"订单3"})
db.orders.insert({"_id":4,"pid":1,"ordername":"订单4"})
db.product.find()
db.orders.find()
下面我简单介绍一些$lookup中的参数:
from:需要关联的表【orders】
localField: 【product】表需要关联的键。
foreignField:【orders】的matching key。
as:对应的外键集合的数据,【因为可能是一对多的,对吧】
db.WebAnimation.insert
([{id:1,name:"四月是你的谎言",type:"掠心",ViewingDegree:"该影评太长",evaluate:"感人到流泪",score:"5分",ViewingAddress:"https:/www.baidu.com"},{id:2,name:"罪恶王冠",type:"掠心",ViewingDegree:"该影评太长",evaluate:"感人到流泪",score:"5分",ViewingAddress:"https:/www.baidu.com"},{id:3,name:"斩赤红之瞳",type:"掠心",ViewingDegree:"该影评太长",evaluate:"感人到流泪",score:"5分",ViewingAddress:"https:/www.baidu.com"},{id:4,name:"叛逆的努努修",type:"烧脑",ViewingDegree:"该影评太长",evaluate:"感人到流泪",score:"5分",ViewingAddress:"https:/www.baidu.com"},{id:5,name:"从零开始的异界生活",type:"剧情",ViewingDegree:"该影评太长",evaluate:"感人到流泪",score:"5分",ViewingAddress:"https:/www.baidu.com"},{id:6,name:"夏目友人账",type:"治愈",ViewingDegree:"该影评太长",evaluate:"感人到流泪",score:"5分",ViewingAddress:"https:/www.baidu.com"},{id:7,name:"野良神",type:"打斗",ViewingDegree:"该影评太长",evaluate:"感人到流泪",score:"5分",ViewingAddress:"https:/www.baidu.com"},{id:8,name:"金之炼金术士",type:"炼药",ViewingDegree:"该影评太长",evaluate:"感人到流泪",score:"5分",ViewingAddress:"https:/www.baidu.com"},{id:9,name:"进击的巨人",type:"剧情",ViewingDegree:"很大的人",evaluate:"感人到流泪",score:"5分",ViewingAddress:"https:/www.baidu.com"},{id:10,name:"少年歌行",type:"剧情",ViewingDegree:"小和尚无心",evaluate:"感人到流泪",score:"5分",ViewingAddress:"https:/www.baidu.com"},{id:11,name:"白蛇:缘起",type:"爱情",ViewingDegree:"该影评太长",evaluate:"国产良心",score:"4分",ViewingAddress:"https:/www.baidu.com"},{id:12,name:"姜子牙",type:"剧情",ViewingDegree:"该影评太长",evaluate:"国产良心",score:"5分",ViewingAddress:"https:/www.baidu.com"},{id:13,name:"秦时明月1-5",type:"剧情",ViewingDegree:"国产动漫的扛把子",evaluate:"感人到流泪",score:"5分",ViewingAddress:"https:/www.baidu.com"},{id:14,name:"秦时明月1-5",type:"剧情",ViewingDegree:"国产动漫的扛把子",evaluate:"感人到流泪",score:"5分",ViewingAddress:"https:/www.baidu.com"}])
db.username.insert([{id:1,name:"admin",pwd:"123456",deta:"2019/06/01",QQ:"364931399",phone:"13297126970"},{id:2,name:"ttg",pwd:"ttgtest",deta:"2019/06/01",QQ:"658945535",phone:"15698756354"}])
MongoDB,表与表之间的关联
db.orders.aggregate([
{
$lookup:
{
from: "inventory",
localField: "item",
foreignField: "sku",
as: "so"
}
},
{$unwind:"$so"},
{
$lookup: {
from: "sanbiao",
localField: "so.sku",
foreignField: "key",
as:"list"
}
}
])
例子:
var a={ "_id" : ObjectId("51e8636953dbe31d5f34a381"), "item" : "journal", "qty" : 10, "type" : "book" } var b={ "_id" : ObjectId("51e8636953dbe31d5f34a382"), "item" : "journal", "qty" : 10, "type" : "book" } var c={ "_id" : ObjectId("51e8636953dbe31d5f34a383"), "item" : "journal", "qty" : 10, "type" : "book" } var d={ "_id" : ObjectId("51e8636953dbe31d5f34a384"), "item" : "journal", "qty" : 10, "type" : "book" } db.A.insert(a) db.A.insert(b) db.A.insert(c) db.A.insert(d) var Ba={Apid:[new DBRef('A',ObjectId("51e8636953dbe31d5f34a381"))],value:3} db.B.insert(Ba) var Ba={Apid:[new DBRef('A',ObjectId("51e8636953dbe31d5f34a382"))],value:4} db.B.insert(Ba) var Ba={Apid:[new DBRef('A',ObjectId("51e8636953dbe31d5f34a383"))],value:7} db.B.insert(Ba) var Ba={Apid:[new DBRef('A',ObjectId("51e8636953dbe31d5f34a384"))],value:8} db.B.insert(Ba) db.B.find() db.A.find() db.A.findOne({"_id":db.B.findOne().Apid[0].$id})
关联外键查询
db.A.findOne({"_id":db.B.findOne().Apid[0].$id})
db.B.find({"$db.test":{"Apid":DBRef("A", ObjectId("5f2149b8a26250f89002ecda"))} })db.B.find().Apid.forEach(function(ref){printjson(db[ref.$ref].findOne({"_id":ref.$id}));})
连接mongodb
try
{
string urls = "mongodb://localhost:27017/";
//----------------------------------添加数据
////连接数据库
//Console.WriteLine("连接数据库");
//var client = new MongoClient(urls);
////获取database
//Console.WriteLine("获取database");
//var mydb = client.GetDatabase("myDb");
////获取collection
//Console.WriteLine("获取collection_beifen");
//var collection = mydb.GetCollection<BsonDocument>("userinfo");
////待添加的document
//Console.WriteLine("待添加的document");
//var doc = new BsonDocument{
// { "_id",1 },
// { "name", "张三" },
// { "gongzuo", "教师" },
// { "youjian","364931399@qq.com" },
// { "roles","Mesghes" },
// { "address","添加" }
//};
//collection.InsertOne(doc);
//Console.WriteLine("数据插入完毕");
//----------------------------------查询数据
var client = new MongoClient(urls);
//获取database
var mydb = client.GetDatabase("myDb");
//获取collection
var collection = mydb.GetCollection<BsonDocument>("Razor");
//Fileter用于过滤,如查询name = 吴九的第一条记录
var filter = Builders<BsonDocument>.Filter;
//Find(filter)进行查询
var doc = collection.Find(filter.Eq("_id", "3")).FirstOrDefault();
}
catch (Exception ex)
{
throw new System.Exception(ex.Message);
}