2016-10-12 2 views
0

Ich möchte ein Filialdokument in einem Unterobjekt-Feld erstellen, nicht zu aktualisieren. Mongoose erstellen ein Unterobjekt in einem Unterobjekt

Mein Schema:

var DemandeSchema = new Schema({ 
    titre: { 
     type: String, 
     required: true 
    }, 
    description: { 
     type: String, 
     required: true 
    }, 
    type: { 
     type: String, 
     required: true 
    }, 
    answer: {} 
}); 

Mein Code:

demande.update(
    { name: 'answer' }, 
    { $push: req.body.answer }, 
    { upsert: true }, 
    function(error, user) { 
     if (error) return next(error); 
     else { 
      return true; 
     } 
    } 
) 

req.body.answer = { 
    "id": "57f512f4360d8818a4e5ea3d", 
    "answer": { 
    "122547eee99" : { 
     "review" : "1.3", 
     "login" : "new" 
    } 
    } 
} 

Aber dieser Code nicht ein neues Feld in meiner DB erstellen, aktualisiert sie gerade das Feld answer wenn ich Ich möchte nur ein neues Objektfeld im Antwortfeld erstellen.

Tatsächliches Ergebnis:

{ 
    "_id" : ObjectId("57f512f4360d8818a4e5ea3d"), 
    "titre" : "TEST", 
    "description" : "ee", 
    "type" : "ee", 
    "__v" : 0, 
    "answer" : { 
     "122547eee98" : { 
      "review" : "8.8", 
      "login" : "x" 
     } 
    } 
} 

Erwartetes Ergebnis:

{ 
    "_id" : ObjectId("57f512f4360d8818a4e5ea3d"), 
    "titre" : "TEST", 
    "description" : "ee", 
    "type" : "ee", 
    "__v" : 0, 
    "answer" : { 
     "122547eee98" : { 
      "review" : "8.8", 
      "login" : "x" 
     }, 
     "122547eee99" : { 
      "review" : "1.3", 
      "login" : "new" 
     } 
    } 
} 
+0

Antwortfeld Array sein sollte, so kann es zu Array geschoben werden und neuen Datensatz hinzufügen – chirag

Antwort

1
var DemandeSchema = new Schema({ 
titre: { 
    type: String, 
    required: true 
}, 
description: { 
    type: String, 
    required: true 
}, 
type: { 
    type: String, 
    required: true 
}, 
answer: [] 
}); 

Antwort Feld geschweiften Klammern umwandeln würde Klammern rempelt alle neuen Antworten zu quadrieren. Fazit: Es erstellt ein Array.

0

die Sie interessieren, und in Schema Antwort: [],

demande.findOne({ name: 'answer' }, function(err, result){ 
result.answer.push({ans:req.body.answer}) 
var dem = new Demande(result); // Demande is ur mongoose schema model, 
dem.save(function(err, result){ 

console.log(result); 
}); 
}) 
1

Anstelle des $push Operator, der auf Arrays funktioniert, verwenden Sie die $set Betreiber zusammen mit der Punktnotation zu set the subdocument in the embedded answer document.

Sie müssten das Dokument für die Verwendung in Ihrem Update vorverarbeiten, damit es über die dot notation verfügt. Das folgende Mongo Mantel Beispiel soll dies verdeutlichen:

var obj = { 
     "id": "57f512f4360d8818a4e5ea3d", 
     "answer": { 
      "122547eee99" : { 
       "review" : "1.3", 
       "login" : "new" 
      } 
     } 
    }, 
    update = {}; 
var key = Object.keys(obj.answer)[0]; // get the dynamic key "122547eee99" 
update["answer."+key] = obj.answer[key]; // create the update object with dot notation 

/* 
    update = { 
     "answer.122547eee99": { 
      "review" : "1.3", 
      "login" : "new" 
     } 
    } 
*/ 

db.demandes.update(
    { "_id" : ObjectId(obj.id)}, 
    { "$set": update }, 
    { "upsert": true } 
) 

das gleiche Konzept wie oben, können Sie die Dokumente erstellen können in Ihrem Update wie folgt verwenden:

var update = {}, 
    key = Object.keys(req.body.answer.answer)[0]; // get the dynamic key "122547eee99" 

// create the update object with dot notation 
update["answer."+key] = req.body.answer.answer[key]; 

demande.update(
    { "_id": req.body.answer.id }, 
    { $set: update }, 
    { upsert: true }, 
    function(error, user) { 
     if (error) return next(error); 
     else { 
      return true; 
     } 
    } 
); 
Verwandte Themen