- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经创建了这个架构。大多数时候,我需要字段 v1
必须是必需的,但在特殊情况下,字段 v1
不需要它。我该怎么做?
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var MonographSchema = new Schema({
v1: {
type: String,
required: true,
trim: true
},
v3: [
{
_id: false,
_: String,
a: String,
b: String,
c: [String],
t: Number
}
]
});
mongoose.model('Monograph', MonographSchema);
var Monograph = mongoose.model('Monograph');
var monograph1 = new Monograph({
v1: '001ab',
v3: [
{'_': 'BR1.1', 'a': '1.00', 'b': 'T17a', 'c': ['v.1', 'e.2'], 't': '1001'},
{'_': 'BR67.1', 'a': '614.32', 'b': 'T17a', 'c': ['v.2'], 't': '25'},
{'b': 'T17a', 'c': ['v.2'], 't': '25'}
]
});
var monograph2 = new Monograph({
v3: [
{'_': 'BR1.1', 'a': '1.00', 'b': 'T17a', 'c': ['v.1', 'e.2'], 't': '1001'},
{'_': 'BR67.1', 'a': '614.32', 'b': 'T17a', 'c': ['v.2'], 't': '25'},
{'b': 'T17a', 'c': ['v.2'], 't': '25'}
]
});
monograph1.save(); //all fine
monograph2.save(); //I get an error
如何即时取消设置 v1
的 required: true
?
最佳答案
好吧,也许不是“即时关闭”,但您可以只调用一种通用的 .update()
形式,而不是 .save()
,它确实不使用预保存 Hook 的验证:
var async = require('async'),
mongoose = require('mongoose'),
Schema = mongoose.Schema;
mongoose.connect('mongodb://localhost/test');
var MonographSchema = new Schema({
v1: {
type: String,
required: true,
trim: true
},
v3: [
{
_id: false,
_: String,
a: String,
b: String,
c: [String],
t: Number
}
]
});
mongoose.model('Monograph', MonographSchema);
var Monograph = mongoose.model('Monograph');
var monograph1 = new Monograph({
v1: '001ab',
v3: [
{'_': 'BR1.1', 'a': '1.00', 'b': 'T17a', 'c': ['v.1', 'e.2'], 't': '1001'},
{'_': 'BR67.1', 'a': '614.32', 'b': 'T17a', 'c': ['v.2'], 't': '25'},
{'b': 'T17a', 'c': ['v.2'], 't': '25'}
]
});
var monograph2 = new Monograph({
v3: [
{'_': 'BR1.1', 'a': '1.00', 'b': 'T17a', 'c': ['v.1', 'e.2'], 't': '1000'},
{'_': 'BR67.1', 'a': '614.32', 'b': 'T17a', 'c': ['v.2'], 't': '25'},
{'b': 'T17a', 'c': ['v.2'], 't': '25'}
]
});
async.series(
[
function(callback) {
Monograph.findByIdAndUpdate(
monograph1._id,
{ "$set": monograph1.toObject() },
{ "upsert": true },
function(err,doc) {
if (err) throw err;
console.log(JSON.stringify( doc, undefined, 2 ));
callback();
}
);
},
function(callback) {
Monograph.findByIdAndUpdate(
monograph2._id,
{ "$set": monograph2.toObject() },
{ "upsert": true },
function(err,doc) {
if (err) throw err;
console.log( JSON.stringify( doc, undefined, 2 ));
callback();
}
);
}
]
);
所以这两个调用都会正常工作:
{
"_id": "542a41389330a912140c20c9",
"v1": "001ab",
"__v": 0,
"v3": [
{
"_": "BR1.1",
"a": "1.00",
"b": "T17a",
"t": 1001,
"c": [
"v.1",
"e.2"
]
},
{
"_": "BR67.1",
"a": "614.32",
"b": "T17a",
"t": 25,
"c": [
"v.2"
]
},
{
"b": "T17a",
"t": 25,
"c": [
"v.2"
]
}
]
}
{
"_id": "542a41389330a912140c20ca",
"__v": 0,
"v3": [
{
"_": "BR1.1",
"a": "1.00",
"b": "T17a",
"t": 1000,
"c": [
"v.1",
"e.2"
]
},
{
"_": "BR67.1",
"a": "614.32",
"b": "T17a",
"t": 25,
"c": [
"v.2"
]
},
{
"b": "T17a",
"t": 25,
"c": [
"v.2"
]
}
]
}
因此“验证”和其他方法实际上“绑定(bind)”到 .save()
方法。如果您不使用它,则不会调用这些方法。哦,您可以要求从 .toObject()
调用中输出“虚拟”字段,因此如果您使用它,则无需丢失它。
因此,要么删除“required”属性可能是您最好的方法,但只要您更加小心,这是可能的:
async.series(
[
// Is valid anyway
function(callback) {
monograph1.save(function(err,doc) {
if (err) throw err;
console.log( JSON.stringify( doc, undefined, 2 ) );
callback();
});
},
// Remove the validators and replace
function(callback) {
var hold = monograph2.schema.paths.v1.validators;
monograph2.schema.paths.v1.validators = [];
monograph2.save(function(err,doc) {
if (err) throw err;
console.log( JSON.stringify( doc, undefined, 2 ) );
monograph2.schema.paths.v1.validators = hold;
callback();
});
},
// With validators will fail
function(callback) {
monograph2.save(function(err,doc) {
if (err) throw err;
console.log( JSON.stringify( doc, undefined, 2 ) );
callback();
});
}
]
);
这表明,如果您从正在使用的模式路径中删除“validators”数组,那么将不会进行检查。您可以只删除“必需的”验证器,但对于所呈现的模式,这是该路径上存在的唯一验证器。
必须小心,因为这是对模型附加架构的“全局”更改,并且在替换之前,验证器将被视为不存在。这也意味着您不是修改对象的“实例”,而是修改所有实例使用的附加对象。因此,虽然这是“关闭”的,但它是“到处都关闭的”吗?
所以真正的选择分为:
最终,您可以“暂时”删除此检查,但可能不会以您期望的方式删除,而且仅此一点就存在缺陷。
关于javascript - 如何在 Mongoose 中动态删除所需的验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26113032/
在 JSF2 应用程序中遇到验证属性的问题时,有两种主要方法。 使用 Annotation 在 ManagedBean 上定义验证 @ManagedBean public class MyBean {
我想实现一个不常见的功能,我认为 jquery 验证插件将是最好的方法(如果您在没有插件的情况下建议和回答,我们也会欢迎)。我想在用户在输入字段中输入正确的单词后立即隐藏表单。我试过这个: $("
我有几个下拉菜单(类名为month_dropdown),并且下拉菜单的数量不是恒定的。我怎样才能为它们实现 NotEqual 验证。我正在使用 jQuery 验证插件。 这就是我写的 - jQuery
我设法制作了这个网址验证代码并且它起作用了。但我面临着一个问题。我认为 stackoverflow 是获得解决方案的最佳场所。 function url_followers(){ var url=do
我目前正在使用后端服务,该服务允许用户在客户端应用程序上使用 Google Games 库登录。 用户可以通过他们的 gplay ID 向我们发送信息,以便登录或恢复旧帐户。用户向我们发送以下内容,包
我正在尝试验证输入以查看它是否是有效的 IP 地址(可能是部分地址)。 可接受的输入:172、172.112、172.112.113、172.112.113.114 Not Acceptable 输入
我从 Mongoose 验证中得到这条消息: 'Validator failed for path phone with value ``' 这不应该发生,因为不需要电话。 这是我的模型架构: var
我一直在尝试使用Python-LDAP (版本 2.4.19)在 MacOS X 10.9.5 和 Python 2.7.9 下 我想在调用 .start_tls_s() 后验证与给定 LDAP 服务
我正在处理一个仅与 IE6 兼容的旧 javascript 项目(抱歉...),我想仅在 VS 2017 中禁用此项目的 ESLint/CSLint/Javascript 验证/CSS 验证。 我知道
我正在寻找一种方法来验证 Spring 命令 bean 中的 java.lang.Double 字段的最大值和最小值(一个值必须位于给定的值范围之间),例如, public final class W
我正在尝试在 springfuse(JavaEE 6 + Spring Framework (针对 Jetty、Tomcat、JBoss 等)) 和 maven 的帮助下构建我的 webapps 工作
我试图在我们的项目中使用 scalaz 验证,但遇到了以下情况: def rate(username: String, params: Map[String, String]): Validation
我有一个像这样的 Yaml 文件 name: hhh_aaa_bbb arguments: - !argument name: inputsss des
我有一个表单,人们可以单击并向表单添加字段,并且我需要让它在单击时验证这些字段中的值。 假设我单击它两次并获取 2 个独立的字段集,我需要旋转 % 以确保它在保存时等于 100。 我已放入此函数以使其
在我的页面中有一个选项可以创建新的日期字段输入框。用户可以根据需要创建尽可能多的“截止日期”和“起始日期”框。就像, 日期_to1 || date_from1 日期到2 ||日期_from2 date
我有一个像这样的 Yaml 文件 name: hhh_aaa_bbb arguments: - !argument name: inputsss des
有没有办法在动态字段上使用 jquery 验证表单。 我想将其设置为必填字段 我正在使用 Jsp 动态创建表单字段。 喜欢 等等...... 我想使用必需的表单字段验证此表单字段。 最佳答
嗨,任何人都可以通过提供 JavaScript 代码来帮助我验证用户名文本框不应包含数字,它只能包含一个字符。 最佳答案 使用正则表达式: (\d)+ 如果找到匹配项,则字符串中就有一个数字。 关于J
我有两个输入字段holidayDate和Description(id=tags) $(document).ready(function() {
我遇到了这个问题,这些验证从电子邮件验证部分开始就停止工作。 我只是不明白为什么即使经过几天的观察,只是想知道是否有人可以在这里指出我的错误? Javascript部分: function valid
我是一名优秀的程序员,十分优秀!