如何在 MongoDB,Vuejs 中为 UNIQUE 字段设置验证?

How to set validation for UNIQUE fields in MongoDB, Vuejs?

我是 MongoDB 和 Vuejs 的新手。我不确定我是否有可能尝试为唯一值设置验证,但不知何故它不起作用。

我从后端定义的模式:

const uuid = require("uuid");
const mongoose = require("mongoose");
const Schema = mongoose.Schema;

let informationSchema = new Schema ({
    _id: {type: String, default: uuid.v1},
    firstName: {                                    
        type: String, required:true, trim: true, unique: true
    },
    lastName: {                                     
        type: String, required:true, trim: true, unique: true
    }
});

module.exports = mongoose.model('informations', informationSchema)

我在前端的 Vuejs 中的动作表单:

<template>
    <div class="row justify-content-center">
        <div class="col-md-6">
            <h3 class="text-center">Create Name</h3>
            <form @submit.prevent="handleSubmitForm">
                <div class="form-group">
                    <label>First Name</label>
                    <input type="text" class="form-control" v-model="name.firstName" required>
                </div>
                <div class="form-group">
                    <label>Last Name</label>
                    <input type="text" class="form-control" v-model="name.lastName" required>
                </div>
                <button class="btn btn-danger mt-3">Create</button>
            </form>
        </div>
    </div>
</template>

<script>
    import axios from "axios";

    export default {
        data() {
            return {
                name: {
                   firstName: '',
                   lastName: ''  
                }
            }
        },
        methods: {
            handleSubmitForm() {
                let apiURL = 'http://localhost:3000/name';
                
                axios.post(apiURL, this.student).then(() => {
                    console.log(res)
                }).catch(error => {
                    console.log(error)
                });
            }
        }
           
    }
</script>

我的第一个插入数据:[{"firstName":"ABC", "lastName": "DCF"}] 我想插入第二个数据:firstName =“ABC”,但姓氏 =“XYZ”。由于在后端定义的架构中设置了验证(唯一),因此发生验证错误。

我的预期输出:

有什么办法可以做到:

  1. 如果我插入第一个数据,它将起作用。
  2. 如果我插入与第一个数据相同的第二个数据,则会出现验证错误。
  3. 如果我只插入与 lastName 不同的第三个数据,它将起作用。

非常感谢。

首先,Mongo和Vue是完全分开的,没有任何关系。

回答您的问题,验证失败,因为您告诉 mongo“将 firstNamelastName 设置为唯一字段”。但不是“将这些字段设置为唯一”。因此,当您添加名字时,第二次尝试添加现有的 firstName 但失败了。

所以你可以创建一个唯一索引:

informationSchema.index({ firstName: 1, lastName: 1 }, { unique: true });

并删除架构中的 unique 约束。