【问题标题】:MongoDB / MongoLab Remove request works locally but deletes database when liveMongoDB / MongoLab 删除请求在本地工作,但在活动时删除数据库
【发布时间】:2015-10-15 03:42:40
【问题描述】:

以下使用nodejsexpressjsmongodb。在实时站点上,它使用mongolab。我正在从前端向服务器发出POST 请求,服务器通过从数据库中删除 single 匹配记录来处理请求。服务端工作(在ExpressJS完成如下:

var removeStuff = req.body.removeStuff;
var currentId = req.user._id;
var currentEmail = req.user.email;

myStuff.findOne({
  $and: [
      { $or: [{stuff: removeStuff}] },
      { $or: [{apid:currentId},{apiemail:currentEmail}] }
  ]
}, function (err, currentStuff) {
  currentStuff.remove();
  res.send('Stuff was removed from database...')
});

真正奇怪的是,当我在localhost 上运行它时,它非常适合该网站。但是当它生效时,发出请求会从数据库中删除 ALL 记录。

【问题讨论】:

  • 这是不可能的,除非它是 mongoose 的错误。其他地方必须有代码是有问题的代码。您在对集合没有影响的文档上调用 .remove()
  • 嗯,我一直在寻找错误...再次它在本地主机上完美运行,所以也许它可能与猫鼬有关?我看到以前有这种错误,但它是在 2013 年 github.com/Automattic/mongoose/issues/1649
  • .remove() 调用collection.remove(obj) 其中obj 是您调用它的整个文档。所以唯一可能的匹配是它本身(因为它包括它的 id)。看看here 对调用本身做了什么,here 解释了它用作匹配的内容。 (请检查您使用的版本)

标签: javascript node.js mongodb express mlab


【解决方案1】:

好的,我明白了。我不确定为什么原版不起作用,但我发现在this StackOverflow question 有人回答了类似的问题。他们的做法是:

var removeStuff = req.body.removeStuff;
var currentId = req.user._id;
var currentEmail = req.user.email;

myStuff.findOneAndRemove({
  $and: [
      { $or: [{stuff: removeStuff}] },
      { $or: [{apid:currentId},{apiemail:currentEmail}] }
  ]
}, function (err) {
  res.status(200).send("it worked...");
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-26
    • 2020-06-05
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-17
    • 2020-05-18
    相关资源
    最近更新 更多