Node.js循环遍历数组并不显示整个对象

时间:2016-02-26 21:17:17

标签: javascript arrays node.js mongoose

我在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]

我做错了什么?

2 个答案:

答案 0 :(得分:3)

这是对象的默认toString()。尝试

console.log(JSON.stringify(cartItem));
console.log(JSON.stringify(cart[0]));

相反,如果你想看到对象的结构。

答案 1 :(得分:0)

问题:

出现这个问题是因为您使用了 findById() 返回数组内的结果

据我所知,User 文档中只能有一个用户记录

解决方案: 使用返回单个用户结果的 findOne(),您可以遍历 user.carts