Mongoose将产品添加到Cart产品阵列中



我一直在想如何将新产品push与数据库中现有的cart进行比较。

updateOne正在搜索具有声明的userId的购物车,然后绑定以将新产品插入到产品阵列中。

$addToSet应该这样使用吗?任何能引导我走向正确方向的提示和建议都将不胜感激!

此外,我还尝试了其他方法,如insert、insertOne、updates,老实说,我不太确定在这种情况下应该使用哪种方法。

编辑:以前的消息"购物车已经存在"只是我的console.log,所以问题是什么都没发生,无论是在mongo还是在express中,都没有错误消息,我很快就会考虑"可能重复"的建议。

Mongoose购物车系列:

{
"products": [{
"_id": {
"$oid": "5f948e5bd8615318f662d315"
},
"title": "BAND",
"price": 16,
"amount": 25
}],
"totalPrice": 416,
"userId": {
"$oid": "5f940f8876ad3e073a2e1e8b"
},
"__v": 0
}

购物车模式:

const mongoose = require('mongoose');
const cartSchema = new mongoose.Schema(
{
userId: {
type: mongoose.Types.ObjectId,
ref: "User"
},
products: [
{
title: String,
price: Number,
amount: Number
}
],
totalPrice: Number
}
);
const CartModel = mongoose.model('CartModel', cartSchema, "carts");
module.exports = CartModel

推车:

let cart = null;
const CartModel = require('./cartModel')
module.exports = class Cart {
static save(product) {
let cartModel = new CartModel();
console.log('Product: ' + product)
if (cart == null) {
cart = {products: [], totalPrice: 0}
}
cartModel.updateOne(
{
userId: '5f940f8876ad3e073a2e1e8b'
},
{
$addToSet: {
products: [
{
'title': product.title,
'price': product.price,
'amount': product.amount
}
],
totalPrice: product.amount * product.price
}
},
{upsert: true, new: true},
{multi: true},
function (err, res) {
console.log(err, res)
});
}

编辑:解决方案在:https://stackoverflow.com/a/46995621/11004824"解决方案是在模型上运行函数,而不是在它的实例上运行;我不知道在模型的实例上运行不会产生好的结果。我的工作代码

let cart = null;
const CartModel = require('./cartModel')
module.exports = class Cart {
static save(product) {
console.log('Product: ' + product)
if (cart == null) {
cart = {products: [], totalPrice: 0}
}
let productObj = {
'title': product.title,
'price': product.price,
'amount': product.amount
};
CartModel.update(
{
userId: '5f940f8876ad3e073a2e1e8b'
},
{
$push: {
products: productObj
},
$set: {
totalPrice: product.amount * product.price
}
},
{upsert: true, new: true},
function (error, success) {
if (error) {
console.log(error)
} else {
console.log(success)
}
}
);
}

$addToSet在数组中推送一个值(如果该值还不存在(。您要做的是使用$addToSet更新购物车。问题是您还试图使用addToSet更新totalPrice。看看这个Mongo游乐场

相关内容

  • 没有找到相关文章

最新更新