mongoose核心
//一定要实例化koa之前使用
const mongoose = require('mongoose')
mongoose.Promise = require('bluebird')
mongoose.connect(DBURL, { useNewUrlParser: true, useNewUrlParser: true, useUnifiedTopology: true })
mongoose.connection.on('connected', function () {
console.log('Mongoose connection open to ' + DBURL);
});
//上面的connected为测试常见测试如下
var mongoose = require("mongoose");
var db = mongoose.connect("mongodb://127.0.0.1:27017/test");
db.connection.on("error", function (error) {
console.log("数据库连接失败:" + error);
});
db.connection.on("open", function () {
console.log("------数据库连接成功!------");
});
核心概念
mongoDB的核心是文档,也是最基本的数据单元我们可以把一个文档比喻成数据库的一行,那么一个集合就是一个表(Schema,传统意义的表模型)
引入的Schema的概念接下来引入表中有Schema的使用方法
引入表
const disaster = require('./databs/disaster')
let searchAnswer = ctx.query;
let disasterSave = new disaster({ posX: searchAnswer.pox, posY: searchAnswer.poy, mapType: searchAnswer.type, excess: searchAnswer.excess })
disasterSave.save()
//数据库找数据
let data = await disaster.find({ __v: 0 })
//model 模型
const mongoose = require('mongoose')
const Schema = mongoose.Schema
const disaster = new Schema({
mapType: {
type: String,
require: true
},
posX: {
type: Number
},
posY: {
type: Number,
require: true
} ,
excess: {
type: String,
require: true
}
})
module.exports = mongoose.model('disaster', disaster)
到现在我们已经理解了Schema的概念,那么有关于Model是什么呢
model是通过Schema生成的模型,出了Schema的表结构之外还具有了数据的基本操作功能。
var db = mongoose.connect("mongodb://127.0.0.1:27017/test");
// 创建Model
var TestModel = db.model("test1", TestSchema);
//通过model创建entity实体数据
var TestEntity = new TestModel({
name : "Lenka",
age : 36,
email: "[email protected]"
});
console.log(TestEntity.name); // Lenka
console.log(TestEntity.age); // 36
我们可以先让表和数据库关联在创建模型,也可以先创建模型让模型与数据库关联
😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘
😘数据的基本操作
find
obj.find(查询条件,callback);
Model.find({},function(error,docs){
//若没有向find传递参数,默认的是显示所有文档
});
create
Model.create(文档数据, callback))
Model.create({ name:"model_create", age:26}, function(error,doc){
if(error) {
console.log(error);
} else {
console.log(doc);
}
});
update
obj.update(查询条件,更新对象,callback);
var conditions = {name : 'test_update'};
var update = {$set : { age : 16 }};
//$set是更新操作的标识符
TestModel.update(conditions, update, function(error){
if(error) {
console.log(error);
} else {
console.log('Update success!');
}
});
完整的插入删除(W3C)
//db.collection.updateOne() 向指定集合更新单个文档
//db.collection.updateMany() 向指定集合更新多个文档
//插入数据(三个字段)
db.test_collection.insert( [
{"name":"abc","age":"25","status":"zxc"},
{"name":"dec","age":"19","status":"qwe"},
{"name":"asd","age":"30","status":"nmn"},
] )
db.test_collection.updateOne({"name":"abc"},{$set:{"age":"28"}})
//找到name=abc把年龄更新为28
//更新多个数据
db.test_collection.updateMany({"age":{$gt:"10"}},{$set:{"status":"xyz"}})
// $gt(>) $lt(<)
> db.test_collection.find()
{ "_id" : ObjectId("59c8ba673b92ae498a5716af"), "name" : "abc", "age" : "28", "status" : "xyz" }
{ "_id" : ObjectId("59c8ba673b92ae498a5716b0"), "name" : "dec", "age" : "19", "status" : "xyz" }
{ "_id" : ObjectId("59c8ba673b92ae498a5716b1"), "name" : "asd", "age" : "30", "status" : "xyz" }
数据都被更新了
remove
obj.remove(查询条件,callback);
var conditions = { name: 'tom' };
TestModel.remove(conditions, function(error){
if(error) {
console.log(error);
} else {
console.log('Delete success!');
}
});
条件操作符
(>) 大于 - $gt
(<) 小于 - $lt
(>=) 大于等于 - $gte
(<= ) 小于等于 - $lte
db.col.find({likes : {$gt : 100}})
//{likes : {$gt : 100}}
//likes : {$gt : 100}
//满足大于100的likes文档
和命令
db.col.find({likes : {$lt :200, $gt : 100}})
或命令
关系数据库:select * from where(state1=11 and state2=22) or value >300
首先使用MongoDB的方式查询:
分为以下几个步骤实现:
步骤一:实现 (state1=11 and state2=22)
db.getCollection('testOrAnd').find(
{$and:[{"state1":11},{"state2":22}]}
)
步骤二:使用or形式实现 value >300
db.getCollection('testOrAnd'). find(
{ $or:[{"value":{$gte:300}}] }
)
步骤三:将步骤一参数拼接到步骤二or条件
db.getCollection('testOrAnd').
find({$or:
[
{$and:[{"state1":11},{"state2":22}]},{"value":{$gte:300}}
]
})
这里特别注意一般格式是{$or:[,]}
$ or 和 $and操作数组