使用mongoose通过id更新找不到该文档

时间:2017-01-27 11:31:54

标签: node.js mongodb mongoose

写这篇文章时发现问题。
因为它可以帮助其他人不像我一样在正确的地方搜索,你会在下面找到答案。

当条件相同的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,
}

1 个答案:

答案 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