我可以要求在mongodb集合中设置属性吗? (不是null)

时间:2013-07-30 09:45:28

标签: mongodb mongoose

我可以在mongodb中定义一个需要设置某些属性的模式。与SQL中的NOT NULL非常相似。如果可能的话。这是什么语法?

我正在使用node.js和mongoose。 猫鼬v3.6.15 mongodb v2.4.5

修改 查尔斯A提供的答案是正确的,但仔细阅读文档,我发现在mongoose中,也可以根据需要在模式定义中定义一个字段:

foo : {
    bar : { type : String, required : true }
}

4 个答案:

答案 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"
            }
         }
      }
   }
}

您可以在文档herehere中阅读更多内容。

请注意,另一种方法是通过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'。

的字段