2017-01-27 56 views
0

發現這個問題。
因爲它可以幫助別人不在像我這樣的正確的地方搜索,你會發現下面的答案。
使用貓鼬更新id沒有找到文件

我似乎無法做出貓鼬Model.update()請求工作,當一個Model.findOne()具有相同的條件。

爲了說明,這裏是我的代碼:
架構

var GeolocSchema = new mongoose.Schema({ 
    id: { 
    type: String, 
    required: true, 
    unique: true 
    }, 
    count: Number 
}); 

顯示看似打破update嘗試明示考試路線:

router.get('/test', function(req, res, next) { 
    var doc = { 
    id: '50_633-20_059', 
    count: 3, 
    density: 1 
    }; 

    var promise = Geoloc.update({ 
    id: doc.id 
    }, { 
    $set: { 
     density: doc.density 
    } 
    }).exec(); 

    promise.then((result, err) => { 
    if (err) return next(err, null); 
    res.status(201).json(result); 
    }); 
}); 

結果:

{ 
    "ok": 0, 
    "n": 0, 
    "nModified": 0 
} 

明示考試路線顯示工作findOne電話:

router.get('/test2', function(req, res, next) { 
    var doc = { 
    id: '50_633-20_059', 
    count: 3, 
    density: 1 
    }; 

    var promise = Geoloc.findOne({ 
    id: doc.id 
    }).exec(); 

    promise.then((result, err) => { 
    if (err) return next(err, null); 
    console.log('Update result: ', result); 
    res.status(200).json(result); 
    }); 
}); 

結果:

{ 
    "_id": "5885d33239f30034de9a38d0", 
    "id": "50_633-20_059", 
    "count": 3, 
    "__v": 0, 
} 

回答

0

this unaccepted answer爲把我在正確的軌道上。

罪魁禍首是我的模式。
有趣的是(對於無模式數據庫),無法在不存在的字段上進行更新操作:可能是防止數據庫從外部源溢出的失敗保護。
請注意,它通過Mongo CLI按預期工作。

這意味着在上面的代碼中僅在必要的變化是以下:

架構

var GeolocSchema = new mongoose.Schema({ 
    id: { 
    type: String, 
    required: true, 
    unique: true 
    }, 
    count: Number, 
    density: Number // This is mandatory! 
}); 

更多的相關信息here