天天看点

koa与mongoose的数据传输

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操作数组

koa