如何在MongoDB、Vuejs中设置UNIQUE字段的验证



我是MongoDB和Vuejs的新手。我不确定我是否试图为Unique值设置验证,但不知何故,它不起作用。

我从后端定义的架构:

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约束。

最新更新