我尝试定义名为statics
的{{1}}函数,该函数采用convertFromCartItems
类型的模型数组,创建一个CartItem
类型的模型数组,然后使用MongoDB OrderItem
将它们插入到一个操作中。我目前从insertMany()
创建Order
的功能(Cart
和OrderItem
分别指向的父模型)如下所示:
CartItem
这个函数自己调用 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()
然而在Mongoose(实际上是MongoDB)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
尚不存在。 Mongoose使用一些OrderItemSchema
技巧让我通过调用this
来创建模型的实例,但this()
或this.insertMany()
不起作用(因为this().insertMany()
在模型而不是实例)。当前的workarround是返回数组,然后调用insertMany()
以获取此函数之外的项目。关于如何使这个功能插入自身的任何想法?
如果有必要了解我之后的内容,那么这两个模型的基本概述。我有一个代表购物车中商品的模型(models.OrderItem.insertMany()
),我试图获取这些商品的数组并按完成的顺序创建一系列的行(CartItem
)(这类似于Double-entry bookkeeping system,允许已完成的订单在收到订单时获得数据的快照,而OrderItem
可以指向产品的当前定义,例如产品&#39}名称和价格)。