如何在 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”。由于在后端定义的架构中设置了验证(唯一),因此发生验证错误。
我的预期输出:
有什么办法可以做到:
- 如果我插入第一个数据,它将起作用。
- 如果我插入与第一个数据相同的第二个数据,则会出现验证错误。
- 如果我只插入与 lastName 不同的第三个数据,它将起作用。
非常感谢。
首先,Mongo和Vue是完全分开的,没有任何关系。
回答您的问题,验证失败,因为您告诉 mongo“将 firstName
和 lastName
设置为唯一字段”。但不是“将这些字段设置为唯一”。因此,当您添加名字时,第二次尝试添加现有的 firstName
但失败了。
所以你可以创建一个唯一索引:
informationSchema.index({ firstName: 1, lastName: 1 }, { unique: true });
并删除架构中的 unique
约束。
我是 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”。由于在后端定义的架构中设置了验证(唯一),因此发生验证错误。
我的预期输出:
有什么办法可以做到:
- 如果我插入第一个数据,它将起作用。
- 如果我插入与第一个数据相同的第二个数据,则会出现验证错误。
- 如果我只插入与 lastName 不同的第三个数据,它将起作用。
非常感谢。
首先,Mongo和Vue是完全分开的,没有任何关系。
回答您的问题,验证失败,因为您告诉 mongo“将 firstName
和 lastName
设置为唯一字段”。但不是“将这些字段设置为唯一”。因此,当您添加名字时,第二次尝试添加现有的 firstName
但失败了。
所以你可以创建一个唯一索引:
informationSchema.index({ firstName: 1, lastName: 1 }, { unique: true });
并删除架构中的 unique
约束。