gpt4 book ai didi

javascript - 使用 Mongoose 创建对象之前检查唯一字段

转载 作者:行者123 更新时间:2023-12-01 02:49:39 25 4
gpt4 key购买 nike

我正在构建一个 GraphQL 服务器,在将数据提交到数据库(MongoDB 和 Mongoose)之前,我需要进行某种验证。

其中一项检查与唯一字段相关。因此,一个模型可能有一个或多个唯一字段,我需要能够在保存到数据库之前检查这一点。

因此,我构建了一些辅助函数来执行此操作,代码如下:

帮助代码:

import mongoose from "mongoose";

const isFieldUnique = (modelName, fieldName, fieldValue) => {

let model = mongoose.model(modelName);
let query = {};
query[fieldName] = fieldValue;
return model.findOne(query).exec();
};

const executeUniquePromises = (uniques, modelName, data) => {

let promises = [];
uniques.map(name => {

let value = data[name];
if (!value)
throw new Error("Cannot test uniqueness for a null field.");

promises.push(
isFieldUnique(modelName, name, value)
.then(value => {
if (value) {
let error = name + ' is not unique';
console.log(error);
return error;
}

console.log(name + ' is unique');
return null;
})
.catch(error => {
throw new Error(error);
})
)
});

return Promise.all(promises);
};

export const checkUniqueness = (uniques, modelName, data) => {

return new Promise((resolve, reject) => {

executeUniquePromises(uniques, modelName, data).then(result => {

let errors = [];

// Check for errors
result.map((error) => {
if (error)
errors.push(error);
});

if (errors.length > 0)
return reject(errors);
else
resolve();
});
});
}

Mongoose静态创建函数:

import * as helper from './helper';

schema.statics.create = function (data) {

let uniques = ['name', 'email'];
helper.checkUniqueness(uniques,'Company', data)
.then(result => {
let user = new this(data);
return company.save();
})
.catch(error => {
throw new Error(error);
});
}

GraphQL 代码:

const createUser = {
type: UserType,
description: "Create a user",
args: {
data: {
name: "user",
type: new GraphQLNonNull(UserInputType)
}
},
resolve(root, args) {
return UserModel.create(args.data);
}
};

辅助代码看起来很困惑,而且我没有将我的 promise 与其他 promise 一起使用,这是正确的做法。

请记住,我可能需要检查多个字段的唯一性,因此这就是我创建 Promise 数组的原因。

一个问题是,当我在没有唯一匹配的地方插入数据时,我的 GraphQL Server 中没有得到任何返回。

我想找到一种更好的方法来做到这一点,并找出为什么我没有取回保存的对象。

最佳答案

MongoDB 已经处理 unique盒子外面。在 Mongoose 架构中将该字段设置为 unique: true。您可以使用mongoose-beautiful-unique使错误消息类似于验证错误消息。最后,阅读this当您无法使 unique: true 工作时。

关于javascript - 使用 Mongoose 创建对象之前检查唯一字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47043504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com