Lorsque j'utilise $ push dans mongodb, le résultat attendu est différent. Il enveloppe en fait l'objet que je souhaite insérer dans un tableau. C'est problématique car je devrais cartographier le résultat juste pour l'extraire. Toute aide serait grandement appréciée.

Ma requête Mongo

const pushAction = {
    $push: {
      cart: {
        id: itemId,
        quantity: quantity
      }
    }
  }

  // Add item to user's cart
  User.update({_id: userId}, pushAction, (err, success) => {
    if (err) {
      res.status(422).json({'error': 'There was a problem adding the item to your cart.'});
    }
    if (success) {
      // Find user and return the cart
      User.findOne({_id: userId}, {cart: 1}, (err, user) => {
        res.status(200).json({'message': 'The item was successfully added to your cart.', cart: user.cart});
      })
    }
  });

Schéma utilisateur

// Define User Model
const userSchema = new Schema({
  firstName: {
    type: Schema.Types.String,
    required: true
  },
  lastName: {
    type: Schema.Types.String,
    required: true
  },
  password: {
    type: Schema.Types.String,
    required: true
  },
  email: {
    type: Schema.Types.String,
    required: true
  },
  cart: {
    type: Schema.Types.Array
  },
  dateCreated: {
    type: Schema.Types.Date,
    default: Date.now,
    required: true
  },
  dateUpdated: [
    {
      date: {
        type: Schema.Types.Date
      },
      details: {
        type: Schema.Types.ObjectId
      }
    }
  ],
  verified: {
    type: Schema.Types.Boolean,
    required: true
  },
  role: {
    type: Schema.Types.String,
    default: ROLES_BASIC_USER
  }
});

Résultat attendu

"cart" : [ 
    {
        "id" : "587b6b69799ad7ff650edbb5",
        "quantity" : 1
    }, 
    {
        "id" : "587b6b69799ad7ff650edbb5",
        "quantity" : 1
    }, 
    {
        "id" : "587b6b69799ad7ff650edbb5",
        "quantity" : 1
    }
],

Résultat réel

"cart" : [ 
        [ 
            {
                "id" : "587b6b69799ad7ff650edbb5",
                "quantity" : 1
            }
        ], 
        [ 
            {
                "id" : "587b6b69799ad7ff650edbb5",
                "quantity" : 1
            }
        ], 
        [ 
            {
                "id" : "587b6b69799ad7ff650edbb5",
                "quantity" : 1
            }
        ]
    ]
2
Clement 17 janv. 2017 à 11:48

2 réponses

Meilleure réponse
// Define User Model
const userSchema = new Schema({
  firstName: {
    type: Schema.Types.String,
    required: true
  },
  lastName: {
    type: Schema.Types.String,
    required: true
  },
  password: {
    type: Schema.Types.String,
    required: true
  },
  email: {
    type: Schema.Types.String,
    required: true
  },
  cart:[ {
    id: Schema.Types.ObjectId,
    quantity: Number 
  }],
  dateCreated: {
    type: Schema.Types.Date,
    default: Date.now,
    required: true
  },
  dateUpdated: [
    {
      date: {
        type: Schema.Types.Date
      },
      details: {
        type: Schema.Types.ObjectId
      }
    }
  ],
  verified: {
    type: Schema.Types.Boolean,
    required: true
  },
  role: {
    type: Schema.Types.String,
    default: ROLES_BASIC_USER
  }
});
4
midhun k 17 janv. 2017 à 09:18

Essayez de modifier pushAction comme suit:

const pushAction = {
    $push: {
        cart: { $each: [ {id: itemId, quantity: quantity } ] }
    }
}

Nettoyez les éléments existants dans le champ cart avant d'essayer. S'il échoue toujours, le problème peut être lié au schéma.

1
Santanu Biswas 17 janv. 2017 à 08:58