gpt4 book ai didi

arrays - Mongoose /蒙戈 : Update Not Saving

转载 作者:太空宇宙 更新时间:2023-11-04 02:04:13 26 4
gpt4 key购买 nike

我对 mongo/mongoose 遇到的这个问题感到非常困惑。我本质上是试图获取产品数组,从数组中删除某个产品,然后使用省略所选产品的新数组更新购物图表。这是我正在处理的代码片段:

const remove = (req, res, next) => {
console.log('here is the product id ' + req.body.cart.product)
delete req.body._owner // disallow owner reassignment.
Cart.find({_id: req.user.cartId})
.then((products1) => {
console.log("array of products: " + products1[0].product)
const index = products1[0].product.indexOf(req.body.cart.product)
console.log("index valeu: " + index)
if (index > -1) {
products1[0].product.splice(index, 1)
return products1[0].product
}
return products1[0].product
})
.then((products2) => {
console.log('Second Promise Input: ' + products2)
Cart.update({_id: req.user.cartId}, {$set: {product: products2}})
})
.then(() => res.sendStatus(204))
.catch(next)
}

这是我的服务器的输出:

Server listening on port 4741
here is the product id 5952b57ea52d092b8d34c6b0
array of products: 5952b57ea52d092b8d34c6b0,5952b57ea52d092b8d34c6b0,5952b57ea52d092b8d34c6b0,5952b57ea52d092b8d34c6b0,5952b57ea52d092b8d34c6b0
index valeu: 0
Second Promise Input: 5952b57ea52d092b8d34c6b0,5952b57ea52d092b8d34c6b0,5952b57ea52d092b8d34c6b0,5952b57ea52d092b8d34c6b0
PATCH /carts-decrease/595b037e128cfd37e0c864d7 204 38.773 ms

根据我的 console.logs,我按照我想要的方式获取数组,但它根本没有用新数组更新购物车。我已经盯着这段代码太久了,我希望能有第二次关注。谢谢。

附注忽略产品 ID 都是相同的事实,它只是一个测试变量

购物车架构:

'use strict'

const mongoose = require('mongoose')

const cartSchema = new mongoose.Schema({
product: {
type: Array,
required: false
},
owner: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User',
required: false
}
}, {
timestamps: true,
toJSON: {
virtuals: true,
transform: function (doc, ret, options) {
const userId = (options.user && options.user._id) || false
ret.editable = userId && userId.equals(doc._owner)
return ret
}
}
})

const Cart = mongoose.model('Cart', cartSchema)

module.exports = Cart

产品架构:

'use strict'

const mongoose = require('mongoose')

const productSchema = new mongoose.Schema({
name: {
type: String,
required: true
},
price: {
type: Number,
required: true
},
description: {
type: String,
required: true
}
}, {
toJSON: {
virtuals: true
}
})

const Product = mongoose.model('Product', productSchema)

module.exports = Product

显示请求:

const show = (req, res) => {
const product = {}
product.array = []
// console.log(req.cart.product)
const promises = []

Promise.all(req.cart.product.map(function (id) {
return Product.find({_id: ObjectId(id)})
})).then(function (products) {
console.log(products)
req.cart.product = products
return res.json({
cart: req.cart.toJSON({virtuals: true, user: req.user})
})
}).catch(function (err) {
console.log(err)
return res.sendStatus(500)
})
}

最佳答案

我建议您稍微修改您的 cartSchema 并以 embedded documents 数组的形式存储产品。 :

const cartSchema = new mongoose.Schema({
products: [{
name: { type: String },
price: { type: Number }
...
}]
...
});

如果您这样做,您可以简单地使用 $pull更新运算符(operator)以从您的购物车中删除产品:

{ $pull: { <field1>: <value|condition>, <field2>: <value|condition>, ... } }

在您的情况下,查询应如下所示:

Cart.update(
{ _id: req.user.cartId },
{ $pull: { products: { '_id': req.body.cart.product } }}
);

由于嵌入文档将有自己的 ObjectId,因此只有一个文档与查询匹配。

关于arrays - Mongoose /蒙戈 : Update Not Saving,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44898134/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com