14

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

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

编辑 Charles A 提供的答案是正确的,但是通过查看文档,我发现在 mongoose 中也可以像这样在模式定义中定义一个字段:

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

3 回答 3

9

在 Mongoose 中,您可以使用验证器在保存之前检查字段是否已设置。据我所知,没有办法在模式上指定一个字段是必需的,所以它需要更多的样板代码。

于 2013-07-30T10:50:22.093 回答
2

对于必填字段,在集合的验证器中使用 $AND 和“$exists: true”:

db.createCollection("foo", {
  validator: {
    $and: [ {"bar": {$type: "string", $exists: true}} ]
})

更多信息在这里 https://www.compose.com/articles/document-validation-in-mongodb-by-example/

于 2017-09-29T05:34:52.823 回答
1

对于任何在这里找到自己的方式的人,您可以使用“必需”,例如:

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
    }
});
于 2020-08-24T20:19:18.953 回答