首页 > 解决方案 > 如何从静态函数内部访问 Mongoose 模型

问题描述

我正在尝试定义一个statics名为的函数,该函数convertFromCartItems接受一个类型的模型CartItem数组,创建一个类型的模型数组OrderItem,然后使用 MongoDB 将它们插入到单个操作中insertMany()Order我当前用于从(和分别指向Cart的父模型)创建的函数如下所示:OrderItemCartItem

  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'
})

但是在 Mongoose(实际上是 MongoDB)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还不存在。Mongoose 使用了一些this技巧让我通过调用this()this.insertMany()this().insertMany()不工作来创建模型的实例(就像insertMany()在模型上而不是实例上一样)。当前的解决方法是返回数组,然后调用models.OrderItem.insertMany()此函数之外的项目。关于如何让这个函数插入自己的任何想法?

如果它有助于理解我所追求的是这两个模型的基本概述。我有一个模型代表购物车中的一个项目CartItem(完成订单以获取收到订单时的数据快照,同时可以指向当前定义的产品名称和价格)。 OrderItemCartItem

标签: javascriptmongodbmongoose

解决方案


推荐阅读