Mongoose查增改刪

前端cry發表於2023-12-02
  • src目錄下新建一個資料夾models,用來存放資料模型和運算元據庫的方法。
  • models目錄下新建一個檔案user.js,用來管理使用者資訊相關的資料庫操作。
  • 相關的資料模型和資料庫操作方法,最後透過module.exports暴露出去。

mongoose版本8.0.0

1-建立結構

const mongoose = require("mongoose");
const userSchema = new mongoose.Schema(
    {
        id: {
            type: Number,
            index: true,
            unique: true,
        },
        name: String,
    },
    {
        versionKey: false, // 設定false,存取資料就不會帶版本id
    }
);

2-建立模型

const User = mongoose.model("user", userSchema);

3-查增改刪

批次查詢Model.find()

Model.find(filter [, projection] [, options])

await User.find({ name: 'kaka' }, 'name phone'); // 欄位前加'-'表示不返回的欄位
await User.find({}, { name: 1, phone: 1 }); // 1-要返回的欄位 0-不返回的欄位

可以包在函式里,最後透過module.exports把函式暴露出去。

// 查
function FindUserList() {
    return User.find();
}

單個查詢Model.findOne()

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

await User.findOne({ id: 1 }, { name: 1, id: 1 });

新增文件Model.create()

Model.create(docs [, options])

await User.create({ name: 'gaga' });
await User.create([{ name: 'mama' }, { name: 'nana' }]);

修改文件Model.findOneAndUpdate()

Model.findOneAndUpdate([conditions] [, update] [, options])

const options = {
    new: true,
    strict: true,
};
await User.findOneAndUpdate({ id: 1 }, { id: 1, name: 'newName' }, options);
  • conditions:查詢條件。
  • update:新的文件。
  • options:配置項,參見Model - Mongoose 中文網 (nodejs.cn)
    • options.strict:覆蓋模式的嚴格模式選項(預設啟用),可確保傳遞給模型建構函式的、結構中未指定的值不會儲存到資料庫中。
    • options.upsert:預設為false。如果為true,並且沒有找到文件,則插入新文件。
    • options.projection:可選欄位返回。
    • options.new:預設為false。如果為true,則返回修改後的文件,而不是原始文件。

刪除文件Model.findOneAndDelete()

Model.findOneAndDelete(conditions [, options])

await User.findOneAndDelete({ id: 1 });

完整程式碼

// src/models/user.js

const mongoose = require("mongoose");

const userSchema = new mongoose.Schema(
    {
        id: {
            type: Number,
            index: true,
            unique: true,
        },
        name: String,
    },
    {
        versionKey: false,
    }
);

const User = mongoose.model("user", userSchema);

// 查-列表
function FindUserList() {
    return User.find();
}

// 查
function FindUser(id) {
    return User.findOne({ id });
}

// 改
function UpdateUser(id, update) {
    const options = {
        new: true,
        strict: true,
    };
    return User.findOneAndUpdate({ id }, update, options);
}

// 增
function AddUser(user) {
    return User.create(user);
}

// 刪
function DeleteUser(id) {
    return User.findOneAndDelete({ id });
}

module.exports = {
    User,
    FindUserList,
    FindUser,
    UpdateUser,
    AddUser,
    DeleteUser,
};