mongodb-02

通过mongoose操作mongodb

增(创建)

mongoose的api返回基本上都是promise => async await

    
        - 表对象.create()   进行操作之后将数据写入对应表中
            - create参数单个对象添加 => 返回写入的对象结构数据(一般来说只会创建单个)
                示例:let result = await db.create( {name: "路遥",age: 18,sex: true} )
            - create参数多个对象添加 => 返回写入的数组结构数据
                示例:let result = await db.create( {name: "路遥",age: 18,sex: true},{name: "路遥",age: 18,sex: true} )
            - create参数数组内部对象添加 => 返回写入的数组结构数据
                示例:let result = await db.create( [ {name: "路遥",age: 18,sex: true} ] )
    
    

删除


        deleteOne(conditions)  删除符合条件的数据 => 删除单个
        deleteMany(conditions) 删除所有符合条件的数据
            - conditions
            - 删除条件参数与find的查询条件的参数使用方法一致


        update(不支持使用)
        updateOne            修改单个符合查询条件的数据
        updateMany           修改所有符合查询条件的数据
        findByIdAndUpdate
    
        Model.update(conditions,doc,[options],[callback])
            condition   查询条件(和find一样)
            doc         要修改的内容
            options     选项
            callback    回调 参数err,info(更新成功的信息) , 可以用Promise代替

    doc     表规则中属性名的属性值都可以进行修改

        {password:"456"}                     修改 password 为"456"  
            示例:  
                let result = await db.updateOne({name:"路遥"},{age:666})
                let result = await db.updateMany({name:{$regex:"路遥"}},{age:666})
        
        {$set:{"userInfo.test":"123"}}       修改 userInfo.test 为"123"
            示例:
                let result = await db.updateOne({name:"路遥"},{$set{"qqq.qwe":"xiugai"}}) 
                let result = await db.updateOne({name:"路遥"},{"qqq.qwe":"xiugai"}) $set可以不用写

        {$inc:{age:n}}                       修改 age  正数自增n  负数自减n
            示例:
                let result = await db.updateOne({name:"路遥"},{$inc:{age:-10}})

        {$unset:{age:0}}                     移除 age 属性(值随便写啥都是移除)
        
        {$push:{arr:999}}                    为 arr数组 添加一条 999 值

        {$push:{arr: {$each:[1,4,5,9],$slice:-5}}}  为 arr数组 添加 1 4 5 9 值,并截取倒数5个

        {$addToSet:{arr:20}}                 为 arr数组 添加一条 20 值,如果20存在,则不添加

        {$pop:{arr:1}}                       删除 arr数组 的最后一项,arr值为-1则删除第一项

        {$pull:{arr:123}}                    删除 arr数组 所有123值

查(查找数据)


        - 表对象.find( conditions, [projection],[option] );

        - 表对象.findOne( conditions, [projection], [option] ); 查询符合条件第一个数据
            与find使用方法一样,不同点在于 findOne返回的是一个 对象结构,而find返回的是一个 数组结构
        
        - 表对象.findById( id, [projection], [option] ); 查询符合条件数据, 返回 对象结构

            - conditions 常见查询条件
            - 通过表属性名与属性值进行查找 => 属性名与属性值设置可多个(精确查找)
                示例: let result2 = await db.find( {name: "路遥",age: 17} )
            - 返回所有符合条件的数据 => 数据是一个数组结构
            - 未查找到数据 => 返回一个空数组
            - 辅助查询
                1. $or  $nor        或者    取反
                    示例:
                    let result = await db.find( {$or:[{name: "路遥"},{age: 17}]} ) 
                    =>  获取所有符合其中一项的数据
                    let result = await db.find( {$nor:[{name: "路遥"},{age: 17}]} )
                    =>  获取所有不符合其中项的数据
                
                2. $gt $gte $lt $lte $ne        大于 大于等于 小于 小于等于 不等于
                    示例:
                    let result = await db.find({ name: "路遥",age: {$gt:17} })
                    =>  获取大于17的所有数据
                
                3. $in $nin        属性名的对应值是否存在   存在/不存在 (指定的多个字段之类)
                    示例:
                    let result = await db.find({name:{$in:"路遥"} }) => 数据存在对应属性值的数据将会被获取
                    let result = await db.find({name:{$nin:"路遥"} }) => 数据存在对应属性值的数据将不会被获取,将会获取其他不存在该属性值的数据
                    
                4.  $exists        存在某属性
                    示例:
                    let result = await db.find({ qqq:{$exists:true} })

                5.  $size   数组长度匹配 {arr:{$size:2}}

                6.  $all    数组中是否存在指定的所有项, {arr:{all:[123,456]}}

                7.  $where  可以使用JavaScript代码或函数,{$where:"this.age===18"}
                    示例:
                    let result = await db.find({$where:'this.age > 20'},{},{})
                
                *8. 正则    使用正则匹配    模糊查询(只要name属性中包含九,就能查询到)
                    示例:
                    let result = await db.find({name:{ $regex:"久" }})

            - projection 设置返回内容
                属性名:1 || 0     =>   1表示显示对应属性    0表示隐藏对应属性  (默认为1) 
        

            - options  查询条件配置
                skip:Number         略过number项数据
                limit:Number        最多返回number项数据
                sort:{age:1}        正数从小到大 负数从大到小

练习

const mongoose = require("mongoose")

mongoose.connect("mongodb://127.0.0.1:27017/crud")
    .then(() => {
        console.log("连接成功");
    })
    .catch(() => {
        console.log("连接失败");
    })

let sch = new mongoose.Schema({
    name: {
        type: String,
        required: true,
        unique: true,
        trim: true,
    },
    sex: {
        type: String,
        enum: ["男", "女", "未知"]
    },
    age: {
        type: String,
        required: true,
    }
}, {
    versionKey: false
})

let mongo = mongoose.model("l", sch)

// mongoose的api返回基本上都是promise => async await
async function add() {
    // 增
    // let result = await mongo.create({
    //     name:"路遥",
    //     age: 18,
    //     sex: "男"
    // })

    // 查
    // let result = await mongo.find({$or:[{name:"路遥"},{age: 17}]}) 

    // 改
    // let result = await mongo.updateOne({ name: "路遥" }, { age: 666 })

    // 删
    // let result = await mongo.deleteMany({name:"路遥"})
    console.log(result)
}
add()

表关联

怎么同时运行app.js和mongodb文件?

require(“模块”) 对应模块会自定义执行一次

表关联

ObjectId 类型 => 表关联(两个不相关的表,进行数据交流)
mongoose.Schema.Types.ObjectId,
ref: “需要设置表关联的名称”

设置时 将对应的表中数据 objectId 进行赋值给表关联类型即可

获取 find查询api.populate("表关联属性名")

mongoose.js

//引入mongodb.js文件 -> 启动数据库
require("./mongodb/mongodb.js")
require("./mongodb/mongoUser.js")
require("./mongodb/mongoShop")

mongodb.js

const mongoose = require("mongoose")

mongoose.connect("mongodb://127.0.0.1:27017/luyao")
	.then(()=>{
		console.log("数据库连接成功")
	})
	.catch(()=>{
		console.log("数据库连接失败")
	})

mongoUser.js

const mongoose = require("mongoose")

//创建用户信息表
let userSchema = mongoose.model(
	"userInfo",
	new mongoose.Schema(
		{
			name: String,
			age: Number,
			sex: Boolean
		},
		{
			versionKey: false
		}
	)
)

userSchema.create({
	name: "徐星"
	age: 24,
	sex: true
})

mongoShop.js

const mongoose = require("mongoose")

let shopSchema = mongoose.model(
	"shop",
	new mongoose.Schema(
		{
			shopName: String,
			shopPra: Number,
			shopAbout:{
				type: mongoose.Schema.Types.ObjectId,
				//ref 设置关联的表名
				ref: "userInfo"
			}		
		},
		{
			versionKey: false
		}
	)
)

shopSchema.create({
	shopName: "衣服",
	shopPra: 999,
	shopAbout: "642830765dae0053e2ec531e"
})

shopSchema.find().populate("shopAbout").then((data)=>{
	console.log(data)
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雷旭4466

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值