【发布时间】:2016-12-11 02:02:18
【问题描述】:
我在这里要做的是通过 id 查找用户,如果找不到该用户,那么我将其添加到集合中。但是,如果找到了,我只是想将新产品推送到现有用户的文档中。
这里的问题是 for 循环中的以下 if 语句:
for(var i=0; i < data.products.length; i++) {
console.log("Product
found:"+!data.products[i].product.equals(req.body._id));
//if the requested product is not found
if(!data.products[i].product.equals(req.body._id)){
data.products.push({product: req.body._id, isAdded: true,
quantity:1});
}
console.log("Adding product.....");
}//for loop
似乎第一次迭代发现条件为真,即使我已经有一个具有相同 id 的产品存在。只要 id 存在于我的文档中,它就应该是 false。请问有人能解释一下猫鼬的这种行为吗?
for 循环内的 console.log 正在返回以下结果:
Product found:true
Adding product.....
Product found:false
Adding product.....
Product found:false
Adding product.....
Product found:false
Adding product.....
api.post('/me/cart', wagner.invoke(function(Cart) {
return function(req, res, next) {
console.log("new post request"+ req.headers['usr'] );
Cart.findOne({userId: req.headers['usr']},
function(err,data){
if(err){
throw err;
}
console.log("found this..."+ (!data));
//if No user is found add a new cart
if(!data && data.length < 0){
var cart = new Cart();
cart.userId = req.headers['usr'];
cart.products.push({product: req.body._id,
quantity:1, isAdded:true});
cart.save(function(error, data) {
if (error){
return res.
status(status.INTERNAL_SERVER_ERROR).
json({ error: error.toString() });
};
return res.json({ product: data });
});
}
//if user is found updated found users cart
else if (data){
for(var i=0; i < data.products.length; i++){
//if the requested product is not found
if(!data.products[i].product.equals(req.body._id)){
data.products.push({product: req.body._id,
isAdded: true, quantity:1});
}
console.log("Adding product.....");
}//for loop
data.save(function(err, updatedCart){
if(err)
throw err;
console.log(updatedCart);
return res.json(updatedCart);
});
}//else if
});
};
【问题讨论】:
标签: node.js mongodb express mongoose