1
我對貓鼬的pull方法有些困惑,你只能通過objectID拉取,還是隻需要拉取數據模型中的值?MongoDB - Mongoose Array從文檔中提取
無論哪種方式,我無法得到拉從數組中刪除元素。
下面是型號:
var fieldSchema = new Schema({
'name' : String,
'value' : String
});
var formSchema = new Schema({
'name' : String,
'fields' : [fieldSchema]
});
var userSchema = new Schema({
'email' : String,
'firstName' : String,
'lastName' : String,
'application' : [formSchema]
});
var fieldModel = mongoose.model('field',fieldSchema);
var formModel = mongoose.model('form',formSchema);
var userModel = mongoose.model('user',userSchema);
代碼(存在這就是爲什麼findOne沒有paramters數據庫只有一個DOC):
userModel.findOne({}, function (err, user) {
if (err) return handleError(err);
var edit = false;
for(i in user.application) {
if(user.application[i].name == submit.name) {
edit = true;
user.application.pull({'name':submit.name}); //is this valid?
user.application.push(submit);
}
}
console.log(edit);
if(!edit) {
user.application.push(submit);
}
user.save(function(err, doc, numAffected) {
if (err) console.log(err);
else {
console.log('number of rows: ' + numAffected);
doc.save();
}
});
});
文件在DB:
"_id" : ObjectId("5490f0cdd059b4cdb6bdf7d2"),
"email":"[email protected]",
"firstName":"tester",
"lastName":"tester",
"application" : [
{
"name" : "Contact",
"fields" : [
{
"field_name" : "New field - 1",
"field_value" : "kkkkkkk"
}
]
}
],
爲什麼不建議使用for循環在這個情況下? – rajh2504
,因爲你有數組user.application和使用循環迭代通過,但在同一時間你推入數組中的對象(user.application),因爲它執行多個: 使用此代碼並記錄循環多少次執行: var j = 0; (用戶應用程序中的var i) { console.log(++ j) if(user.application [i] .name == submit.name){ edit = true; user.application.pull({'name':submit.name}); user.application.push(submit); //錯誤! } } – kaxi1993
啊,謝謝你好趕! – rajh2504