代码之家  ›  专栏  ›  技术社区  ›  Jason Sperske

如何从statics函数内部访问Mongoose模型

  •  0
  • Jason Sperske  · 技术社区  · 8 年前

    我在试着定义一个 statics convertFromCartItems 它需要一系列类型的模型 CartItem ,创建类型为的模型数组 OrderItem insertMany() . 我当前用于创建 Order 从 Cart (父模型 订单项 和 分别指向)如下所示:

      schema.statics.convertFromCart = function (cart, shipping, then, unless) {
        let order = new this()
        order._cart = cart
        order.firstName = shipping.firstName
        order.lastName = shipping.lastName
        order.email = shipping.email
        order.address = shipping.address
        order.addressCity = shipping.addressCity
        order.addressPostalCode = shipping.addressPostalCode
        order.addressRegionCode = shipping.addressRegionCode
        order.addressCountryCode = shipping.addressCountryCode
    
        order.save((err, thing) => {
          if (!err && thing) {
            then(thing)
          } else {
            unless(err)
          }
        })
      }
    

    此函数调用 .save()

    models.Order.convertFromCart(cart, shipping, (order) => {
      // Do something with the newly created 'Order'
    })
    

    但是在猫鼬(实际上是猫鼬) insertMany() 是在模型上定义的,而不是在实例上定义的,所以我要做的是这样的:

    schema.statics.convertFromCartItems = function (order, items, then unless) {
      let orderItems = []
      items.forEach((item) => {
        let orderItem = this()
        orderItem._item = item
        orderItem._order = order
        orderItem.quantity = item.quantity
        orderItem.subscribed = item.subscribed
        orderItem.name = item._item._product.name
        orderItem.variation = item._item.variation
        orderItem.price = item._item.price
        orderItem.image = item._item._product.image
        orderItem.created = item.created
        orderItem.updated = item.update
        orderItems.push(orderItem)
      })
      // code I want to use
      OrderItemSchema.insertMany(orderItems, funciton (err, things) {
        if (!err && things) {
          then(things)
        } else {
          unless(err)
        }
      })
    }
    

    但是在这里面 statics.convertFromCartItems 功能, OrderItemSchema this this() this.insertMany() 或 this().insertMany() insertMany() 在模型上,而不是实例上)。当前的工作区是返回数组,然后调用 models.OrderItem.insertMany() 对于此函数之外的项。有没有办法让这个函数自己插入?

    如果它有助于理解我在这里是这两个模型的基本概述。我有一个模型,它代表购物车中的一个项目( CartItem公司 订单项 )(这与 Double-entry bookkeeping system CartItem公司 可以指向产品名称和价格等事物的当前定义)。

    0 回复  |  直到 8 年前