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

del*_*ber 12 mongoose mongodb

这里的例子

http://mongoosejs.com/docs/populate.html

提供以下代码

var story1 = new Story({
      title: "A man who cooked Nintendo"
    , _creator: aaron._id
  });
Run Code Online (Sandbox Code Playgroud)

_creator的定义如下

_creator : { type: Schema.ObjectId, ref: 'Person' }
Run Code Online (Sandbox Code Playgroud)

如果我将代码修改为以下内容

  var story1 = new Story({
      title: "A man who cooked Nintendo"
    , _creator: {name: 'test'}
  });
Run Code Online (Sandbox Code Playgroud)

它似乎很乐意将数据插入MongoDB.

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

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

sta*_*tan 19

继续@JohnnyHK提出的建议,这是一个完整的解决方案(假设_creator是对数字id的引用).

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

function isObjectId(n) {
  return mongoose.Types.ObjectId.isValid(n);
}
Run Code Online (Sandbox Code Playgroud)

验证:[验证器,'我的错误类型']

_creator : { type: Schema.ObjectId, ref: 'Person', validate: isObjectId }
Run Code Online (Sandbox Code Playgroud)

  • 我相信他们已经将它改为:`mongoose.Types.ObjectId.isValid()` (6认同)
  • 这给出了`TypeError:Object函数ObjectId(key,options){SchemaType.call(this,key,options,'ObjectID'); 没有方法'isValid' (3认同)

小智 6

方法isValid不存在(不再?),你最好的选择是一个简单的正则表达式,如这里提供的

  • 我相信他们已经将它改为:`mongoose.Types.ObjectId.isValid()` (4认同)