FindOne in Mongoose Pre

时间:2016-01-22 10:18:49

标签: mongodb mongoose mongoose-schema

问题

我的目标是在我的集合的子集中拥有一个唯一的字段。特别是产品艺术中的序列号应该是唯一的。因此,如果艺术是不同的,那么可以有两个相似的序列号,但如果艺术是相同的,那么只有一个。

要检查我是否要使用mongoose pre middleware(如果schema level上没有更好的解决方案)。

implant.schema.coffee

ImplantModel = require('./implant.model.js')
...
implantSchema = mongoose.Schema({
  art: {
    type: String,
    required: true
  },
  serialNr: {
    type: String,
    required: true
  },
  ...

validateImplant = (data, next) ->
  err = ""
  if !data.art? || data.art == ""
    err += "Keine Implantatbezeichnung vorhanden!\n"
  if !data.serialNr? || data.serialNr == ""
    err +=  "Keine Seriennummer vorhanden!\n"

  return next err if err != ""

  inspect ImplantModel
  # ImplantModel.findOne({serialNr: data.serialNr, art: data.art}, (err, implantFound) ->
  #   return next err if err?
  #   return next "Eine Seriennummer darf nur einmlaig pro Hersteller angelegt werden!"
  #   return next null
  # )
  next

implant.model.coffee

mongoose = require('mongoose')

implantSchema = require('./implant.schema.js').getSchema()

try
  module.exports = mongoose.model('Implant', implantSchema)
catch err
  module.exports = mongoose.model('Implant')

问题在于ImplantModel当时似乎是{}。我也尝试了this.constructor.findOne,如How to query from within Mongoose pre hook in a Node.js / Express app?所述,它给了我findOne is not a function

我可以在调用.save方法之前执行查询,但我想钩子会更好。

0 个答案:

没有答案