如何在MongoDB中进行类型检查?

如何在MongoDB中进行类型检查?,mongodb,mongoose,Mongodb,Mongoose,这里的例子 提供以下代码 var story1 = new Story({ title: "A man who cooked Nintendo" , _creator: aaron._id }); _创建者的定义如下 _creator : { type: Schema.ObjectId, ref: 'Person' } 如果我将代码修改为以下内容 var story1 = new Story({ title: "A man who cooked Ni

这里的例子

提供以下代码

var story1 = new Story({
      title: "A man who cooked Nintendo"
    , _creator: aaron._id
  });
_创建者的定义如下

_creator : { type: Schema.ObjectId, ref: 'Person' }
如果我将代码修改为以下内容

  var story1 = new Story({
      title: "A man who cooked Nintendo"
    , _creator: {name: 'test'}
  });
它似乎很乐意将数据插入MongoDB

{ "title" : "A man who cooked Nintendo", "_creator" : { "name" : "test" }, "_id" : ObjectId("4fb7a55315c5f2de07000002"), "fans" : [ ] }

如何在插入之前捕获错误?我想检查它是否不仅是ObjectId,而且它是否对应于有效的Person。

您可以向模式的_creator字段添加验证,如前所述


为了继续@johnyhk的建议,这里有一个完整的解决方案(假设_creator是一个数字id的引用)

如果要检查该值是否为有效的ObjectId

function isObjectId(n) {
  return mongoose.Types.ObjectId.isValid(n);
}
验证:[验证程序,“我的错误类型”]

_creator : { type: Schema.ObjectId, ref: 'Person', validate: isObjectId }

方法isValid不存在(现在?),您最好的选择是一个简单的正则表达式,正如所提供的那样

这将给出
TypeError:Object函数ObjectId(key,options){SchemaType.call(this,key,options,'ObjectId');}没有方法isValid'
我相信他们已经将其更改为:
mongoose.Types.ObjectId.isValid()
我相信他们已经将其更改为:
mongoose.Types.ObjectId.isValid()
_creator : { type: Schema.ObjectId, ref: 'Person', validate: isObjectId }