Mongoose中常用的Model方法。

2020-10-31  本文已影响0人  似朝朝我心

准备工作,创建Schema约束对象和连接数据库。

//这里没有使用es6的import导入语法,因为没准备好环境,所以用了Node的require。
const mongoose = require('mongoose')
const Schema = mongoose.Schema
mongoose.connect('mongodb://127.0.0.1:27017/mytest', {useNewUrlParser: true, useUnifiedTopology: true})
mongoose.connection.once("open", () => {
    console.log(`数据库已连接成功,Server is running at:http://127.0.0.1:27017`)
})

//创建一个Schema对象
const stuSchema = new Schema({
    name: String, 
    age: Number,
    gender: {
        type: String,
        default: "female"
    },
    address: String
  });
const stuModel = mongoose.model('students', stuSchema);

有了Model,我们就可以对数据库进行增删改查的操作了。

create()方法,创建文档。

Model.create(doc(s),[callback])

stuModel.create([], err => {
    if (!err) {
        console.log("文档插入成功")
    }
})
await stuModel.create([], err => {
    if (!err) {
        console.log("文档插入成功")
    }
})
stuModel.create([
    {
        name: "小明",
        age: 22,
        gender: "male",
        address: "广东深圳"
    },
    {
        name: "小红",
        age: 20,
        gender: "female",
        address: "广东东莞"
    }
], err => {
    if (!err) {
        console.log("文档插入成功")
    }
})

find()方法,查询文档。

Model.find(conditions, [projection], [options], [callback])

stuModel.find({name: "小红"}, (err, docs) => {
    if (!err) {
        console.log(docs)
    }
})

比如我们下面的这个例子(使用对象形式传递),只想显示_id属性字段和age属性字段,其他的通通过滤掉。



node环境执行代码,查看。


Model.findOne(conditions, [projection], [options], [callback])

stuModel.findOne({}, (err, doc) => {
    if (!err) {
        console.log(doc)
    }
})

Model.findById(id, [options], [callback])

stuModel.findById("5f9cf5e1fca4ed20a4b81663", (err, doc) => {
    if (!err) {
        console.log(doc)
    }
})

小结:通过find()查询的结果,返回的对象就是Document,即文档对象,所以我们可得出一个结论,Document对象是Model的实例,为了验证我们的结论,可以使用instanceof方法来判断一下,而typeof 是判断参数是什么类型的实例。

update()方法,修改文档。

Model.update(conditions, doc, [options], [callback])

Model.updateOne(conditions, doc, [options], [callback])

Model.updateMany(conditions, doc, [options], [callback])

Model.replaceOne(conditions, doc, [options], [callback])

remove()和delete()方法,删除文档。

以下方法大同小异

Model.remove(conditions, [callback])

stuModel.remove({name: "小白"}, (err, doc) => {
    if (!err) {
        console.log('文档删除成功')
    }
})

Model.deleteOne(conditions, [callback])

Model.deleteMany(conditions, [callback])

count()方法,统计文档数量。

Model.count(conditions, [callback])

我们尝试使用官网推荐的方法.

Model.countDocuments(conditions, [callback])

stuModel.countDocuments({}, (err, count) => {
    if (!err) {
        console.log(count)
    }
})

Model.estimatedDocumentCount(conditions, [callback])

stuModel.estimatedDocumentCount({}, (err, count) => {
    if (!err) {
        console.log(count)
    }
})

附:官网Model具体方法链接:https://mongoosejs.com/docs/api/model.html

上一篇下一篇

猜你喜欢

热点阅读