我在Node.js中发现了奇怪的数组行为
谷歌搜索没有帮助。 Ofc,这可能会导致我疲劳。如果是的话,我很抱歉。所以,我的模特
var UserSchema = new mongoose.Schema({
id: mongoose.Schema.ObjectId,
added: {
type: Date,
default: Date.now()
},
displayName: String,
cart: [{
orderNumber: mongoose.Schema.ObjectId,
exposition: Object,
offer: Object,
state: Number,//1 - Unpaid
}],
});
在控制器中我试图循环推车数组
var cartId = new ObjectId(req.body.id);
mongoose.model('User').findById(currentUser.userId, function (err, user) {
var cart = user.cart;
console.log(cart);
var expId = -1;
if (cart) {
for (var i = 0; i < cart.length; i++) {
var cartItem = cart[i];
console.log(cartItem);
if (cartItem._id === cartId) {
console.log("SHIT");
expId = user.cart.exposition._id;
break;
}
}
}
});
我没有找到更好的解决方案来在用户中找到嵌入式购物车而非循环。 所以,当我记录我的购物车对象时
console.log(cart);
我正在获得正确的对象并且它可以正常工作,但是当我尝试记录
时console.log(cartItem);
console.log(cart[0]);
我只是
[object Object]
[object Object]
我做错了什么?
答案 0 :(得分:3)
这是对象的默认toString()
。尝试
console.log(JSON.stringify(cartItem));
console.log(JSON.stringify(cart[0]));
相反,如果你想看到对象的结构。
答案 1 :(得分:0)
问题:
出现这个问题是因为您使用了 findById()
返回数组内的结果
据我所知,User
文档中只能有一个用户记录
解决方案:
使用返回单个用户结果的 findOne()
,您可以遍历 user.carts