將其標記爲重複之前: 請仔細閱讀,我試圖從DOC本身更新DOC。不使用SCHEMA或MODEL。因此,任何.findById *都會直接出現在窗口之外。推送一個新對象不會在回調中被重新調用
這裏是我的架構目前看起來像(只有相關部分):
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"
}
}]}}
});
我要推一個新的對象在「元/ AccessControl的/ authTokens」。我目前的做法是:
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);
}
});
};
上面的代碼做的工作,但我有推新對象時的問題,新的對象不獲取返回:
function(err,obj) {
}
而是返回此:
{"n":1,"nModified":1,"ok":1}
我想知道的:
- 我在哪裏錯了?
- 我這樣做是正確的嗎?任何其他方式來$推動obj?
謝謝
'.update'返回修改的文檔的數量,而不是對象 –
請看一看。 http://stackoverflow.com/questions/31808786/mongoose-difference-of-findoneandupdate-and-update – Veeram
@ pk08這就是爲什麼我想知道,是否有任何其他方式來做到這一點,以獲得更新的部分。 – AnkitNeo