我可以在mongodb中定义一个需要设置某些属性的模式。与SQL中的NOT NULL
非常相似。如果可能的话。这是什么语法?
我正在使用node.js和mongoose。 猫鼬v3.6.15 mongodb v2.4.5
修改 查尔斯A提供的答案是正确的,但仔细阅读文档,我发现在mongoose中,也可以根据需要在模式定义中定义一个字段:
foo : {
bar : { type : String, required : true }
}
答案 0 :(得分:9)
在Mongoose中,您可以使用validator检查在保存之前是否已设置字段。据我所知,没有办法在Schema上指定一个字段是必需的,所以它需要更多的样板代码。
答案 1 :(得分:1)
对于必填字段,使用$ AND在集合的验证器中使用" $ exists:true":
db.createCollection("foo", {
validator: {
$and: [ {"bar": {$type: "string", $exists: true}} ]
})
这里有更多信息 https://www.compose.com/articles/document-validation-in-mongodb-by-example/
答案 2 :(得分:0)
对于在这里找到路的任何人,您都可以使用“ required”,例如:
db.createCollection("person", {
validator: {
$jsonSchema: {
bsonType: "object",
required: [ "name" ],
properties: {
name: {
bsonType: "string",
description: "must be a string and is required"
}
}
}
}
}
请注意,另一种方法是通过mongoose使用Mongodb,该方法允许直接在字段级别进行指定:
const person = new mongoose.Schema({
name {
type: String,
required: true
}
});
答案 3 :(得分:-3)
这个问题的一般答案与Mongoose无关,它是一个简单的MongoDB问题,是否可以在每个文档中都需要特定的密钥。
答案是:是的。在此集合上创建唯一索引。索引应为必填字段。只有一个文档的字段值为null,因此在所有文档中强制存在该字段。用稀疏'击败它。
请参阅:http://docs.mongodb.org/manual/core/indexes/
具体来说,是关于唯一索引的部分。请注意,这不适用于类型' hashed'。
的字段