Bevor Sie es als Duplikat markieren: Lesen Sie weiter sorgfältig, ich versuche, den DOC vom DOC selbst zu aktualisieren. Kein SCHEMA oder MODEL verwenden. Daher geht jede .findById * direkt aus dem Fenster.Das Drücken eines neuen Objekts wird im Rückruf nicht erneut gesendet
Hier ist, was zur Zeit mein Schema aussieht (nur entsprechender Abschnitt):
let UserAccSchema = new Schema({
meta : {
accessControl: {
authTokens:[{
issuedOn: {
type: Date,
default: Date.now()
},
expiresOn: {
type: Date,
default: Date.now() + 1728000000 //Defaults to 20-days
},
lastUsage: {
type: Date,
default: Date.now()
},
authAgent: {
type: String,
default: "default"
}
}]}}
});
ich ein neues Objekt in "meta/Accesscontrol/authTokens" schieben will. Mein aktueller Ansatz ist:
UserAccSchema.methods.generateAuthToken = function (authAgent, cb) {
console.info("MongoUser | Auth | Attempting to generate auth token for user | " + this._id);
this.update({
$push: {
"meta.accessControl.authTokens": {
authAgent: authAgent
}
}
}, {safe: true, new: true, upsert:true}, function (err, obj) {
if (err) {
console.error("MongoUser | Auth | Error occurred while saving auth-token information | " + err);
cb(new AppError("Auth token cannot be generated. Please try again.", AppError.ErrorCode.INTERNAL_SERVER_ERROR));
} else {
console.info("MongoUser | Auth | Auth token for user was generated | " + JSON.stringify(obj));
cb(null, obj);
}
});
};
der obige Code die Arbeit tut, aber das Problem, dass ich habe, ist, wenn das neue Objekt gedrückt wird, wird das neue Objekt wird in nicht zurückgegeben:
function(err,obj) {
}
diese
kehrt stattdessen:
{"n":1,"nModified":1,"ok":1}
Was ich wissen will:
- Wo liege ich falsch?
- Mache ich das richtig? Irgendein anderer Weg, um $ den Obj zu drücken?
Danke
'.update' Anzahl der geänderten Dokumente zurückgibt, nicht das Objekt –
Bitte nehmen Sie sich einen Blick zu. http://stackoverflow.com/questions/31808786/mongoose-difference-of-findoneandupdate-and-update – Veeram
@ pk08 Deshalb möchte ich wissen, gibt es eine andere Möglichkeit, dies zu tun, um den aktualisierten Teil zu bekommen. – AnkitNeo