2017-01-17 3 views
2

Wenn ich $ push in mongodb verwende, ergibt sich das erwartete Ergebnis anders. Es wickelt tatsächlich das Objekt, das ich in einem Array schieben möchte. Dies ist problematisch, da ich das Ergebnis nur abbilden müsste, um es zu extrahieren. Jede Hilfe würde sehr geschätzt werden.

Mein Mongo Abfrage

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}); 
     }) 
    } 
    }); 

Benutzer Schema

// 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 
    } 
}); 

Erwartete Ergebnisse

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

Tatsächliches Ergebnis

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

Ich denke, das Problem ist in Ihrem Schema ... Können Sie Ihr Schema posten. –

Antwort

3
// 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 
    } 
}); 
+0

Danke! Lief wie am Schnürchen :) – Clement

1

Versuchen pushAction wie folgt zu ändern:

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

Saubere vorhandene Elemente in cart Feld vor diesem Versuch. Wenn es weiterhin fehlschlägt, liegt das Problem möglicherweise beim Schema.

+0

yeah Fehler tritt noch auf, auch nach dem Ändern der Abfrage. Ich habe meine Frage oben mit dem Schema aktualisiert :) – Clement

+1

Ändern Sie Ihr Schema für Einkaufswagen zu 'Warenkorb: [{ID: Schema.Types.ObjectId, Quantität: Nummer}]' und versuchen Sie dann Ihre Abfrage (löschen Sie Daten vor dem Testen). Es sollte funktionieren. –

+0

Danke! das hat wie ein Charme funktioniert :) – Clement