写这篇文章时发现问题。
因为它可以帮助其他人不像我一样在正确的地方搜索,你会在下面找到答案。
当条件相同的Model.update()
时,我似乎无法使mongoose 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 :(得分: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。