我實際上是試圖在我的mongodb數據庫中保存一條新記錄。Node + Mongoose,在保存之前等待結果
company.save(function(err, company){
if (err)
//fail;
//success
})
但是,這一行動之前,我想給標籤添加到我的公司
我公司架構
var companySchema = new mongoose.Schema({
name: String,
accro: String,
npa: String,
city: String,
country: String,
isverified : Boolean,
tags: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'Tag' // réf. tagSchema
}
]
})
,你可以看到,標籤是一個裁判,所以我檢查標籤是否已經存在:
for (var i = 0; i < req.body.tags.length; i++) {
var currentTag = req.body.tags[i];
Tag.findOne({'label': currentTag }, function(err,t){
var tag_id = "";
if(err) res.send(err);
// if exist
if (t) {
console.log("#" + i + " currentTag existe");
t.use++;
t.save();
tag_id = t._id;
} else {
console.log("#" + i + " currentTag not existe");
var tag = new Tag();
tag.label = currentTag;
tag.save();
tag_id = tag._id;
}
company.tags.push(tag_id);
});
}
但是作爲mongoos ËfindOne功能有所回調,環只是保持「循環」,而當company.save()
被觸發,無標籤已被添加到該公司..
需要一些幫助來獲得它異步:)謝謝
不工作,如果oldTags爲空,試圖修復它:) –
那麼他應該在哪裏寫company.save()?外側循環?如果是的話tag.save()會在那段時間完成? – Subin
只需嘗試上面的代碼並將save()放入裏面,因爲它與更多代碼無關。它的異步行爲不會影響流量。併爲公司標籤,將其保存在循環之外。 – Sachin