我的API中有下面的模式,它获取用户名和他添加到购物车中的产品的详细信息。
const mongoose = require('mongoose');
mongoose.connect('mongodb connection').then(()=>{
console.log('DB connection is successfull');});
const AutoIncrement = require('mongoose-sequence')(mongoose);
const cartSchema = new mongoose.Schema({
cartId : {
type : Number
},
username : {
type : String
},
productsInCart : [{
productId : {type : Number,required : true},
productName : {type:String},
quantity : {type:Number}
}],
statusOfCart : {
type : String,
default : 'Open'
}},{ timestamps: true });
cartSchema.plugin(AutoIncrement,{id : 'cart_seq',inc_field : 'cartId'});
let cartModel = mongoose.model('carts',cartSchema);
module.exports = cartModel;正如您在上面的代码中所看到的那样,我也在使用猫鼬序列将cartId作为一个自动递增的字段。
现在,我有一个POST请求,它在请求体中获取下面的JSON,并使用create方法将它添加到MongoDB中的cart集合中。
{“用户名”:"productsInCart":{ "productId":1,“productName”:“观察”,“数量”:4 },{ "productId":2,“productName”:“电话”,“数量”:5}}
Express API中POST请求的路由处理程序内部的代码如下所示
let ctMod = new cartModel();
ctMod.username = req.body.username;
ctMod.productsInCart = req.body.productsInCart;
let insCartData = await cartModel.create(ctMod,{new:true});
if(insCartData.length > 0)
{
return res.status(200).json({
message : `New items got inserted into the cart with the ID : ${insCartData.cartId}`,
data : insCartData
});
}上面的代码在集合中插入两个条目,如下所示,而不是一个
{ "statusOfCart":"Open","productsInCart":[],"createdAt":"2021-01-04T15:25:35.188Z","updatedAt":"2021-01-04T15:25:35.188Z","cartId":13,"__v":0 },{ "statusOfCart":"Open","productsInCart":{ "_id":“5ff332a891a170b60a21ea9”,"productId":1,"productName":"Watch",“数量”:4 },{ "_id":“5ff332a891a170b60a21eaa”、"productId":2、"productName":"Phone“、"quantity":5}、"username":"admin”、"createdAt":"2021-01-04T15:25:35.210Z“、"updatedAt":"2021-01-04T15:25:35.210Z”、"cartId":14、"__v":0}
你能帮我理解为什么我的数据库中有重复的条目吗?
发布于 2021-01-04 18:49:20
我不知道为什么要使用cartModel.create(ctMod,{new:true});来为集合创建一个新条目。
你可以这样做:
let ctMod = new cartModel();
ctMod.username = req.body.username;
ctMod.productsInCart = req.body.productsInCart;
try{
let insCartData = await cartModel.save();
return res.status(200).json({
error:false,
message : `New items got inserted into the cart with the ID : ${insCartData.cartId}`,
data : insCartData
});
}
catch(err){
console.error("error inserting data", err);
return res.status(500).json({error:true, message:"Something went wrong :("}).
}更新:
重复条目的原因是在create中传递{new:true}标志。它用于在findOneAndUpdate方法中返回更新的文档。但是在创建/保存中,猫鼬默认返回数据。因此,标志不是needed.If --您省略了标志,可以防止重复条目。
此外,在使用create方法保存新条目时,不需要创建cartModel的实例。呃,
let ctMod = new cartModel();
可能只是
let ctMod = {}
希望能帮上忙!
https://stackoverflow.com/questions/65565501
复制相似问题