需求如下,需要在指定的user数据中的cartList属性中保存product数据,代码如下
Users.findOne({ userId: userId }, function (err, userDoc) {
if (err) {
res.json({
status: "1",
msg: err.message
})
} else {
console.log("userDoc:" + userDoc);
if (userDoc) {
var goodsItem = '';
userDoc.cartList.forEach(function (item) {
if (item.productid == productId) {
goodsItem = item;
item.productNum++;
}
});
if (goodsItem) {
userDoc.save(function (err2, doc2) {
if (err2) {
res.json({
status: "1",
msg: err2.message
})
} else {
res.json({
status: '0',
msg: '',
result: 'suc'
})
}
})
} else {
let GoodModel = require('../models/goods');
GoodModel.findOne({ productid: productId }, function (err1, doc) {
if (err1) {
res.json({
status: "1",
msg: err1.message
})
} else {
if (doc) {
doc.productNum = 1;
doc.checked = 1;
userDoc.cartList.push(doc);
userDoc.save(function (err2, doc2) {
if (err2) {
res.json({
status: "1",
msg: err2.message
})
} else {
res.json({
status: '0',
msg: '',
result: 'suc'
})
}
})
// userDoc.update({})
}
}
});
}
}
虽然经过断点分析 userDoc doc都有值了,但是一直没有保存将user的数据修改成功,err2报错如下
No matching document found for id “5b54315d5df95d582c555320” version 0
经过查看数据库表,发现这个user的数据_id是字符串类型,修改为ObjectId类型即可
改为
此处注意,ObjectId 内容长度为24,否则会报错