【问题标题】:Remove entry that matches "this text" from MongoDB从 MongoDB 中删除与“此文本”匹配的条目
【发布时间】:2016-01-18 01:31:08
【问题描述】:

好的,我已经搜索了再搜索,但我无法找到一种方法来完成这项工作。这是我所拥有的:

我正在 node/express/socketio 等中开发一个聊天应用程序。我正在尝试创建一个“清除”函数,以根据指定的输入从 MongoDB 中删除某个聊天消息。例如:

/clear badword
/clear heck
/clear Barbara Streisand

我正在努力创建一个合适的正则表达式,它实际上会找到包含指定文本的条目。

这是我目前正在使用的:

Chat.remove({"msg":{$regex: new RegExp('.*' + myInput, 'i')}});

它似乎没有找到任何东西。注意:指定的文字可以在聊天消息中的任何位置,所以我需要能够说:

如果<this text> 存在于 msg 键中的任何位置,请将其删除。

我已经查看 RegEx 文档几个小时了,但我无法让它发挥作用。谁能指出我正确的方向?

【问题讨论】:

  • 您是否尝试过在静态文本字符串而不是数据库上(通过您的代码)测试您的正则表达式,以确保您已正确构建它们并且它们正在工作?
  • @JohnnyHK -- 是的,我正在使用猫鼬
  • @Xotic750 我能够使用 db.messages.remove({"msg": /*sometext.*}) 从 mongo cli 成功地做到这一点——但是当我尝试在我的实际代码中使用它时出现“提供给 RegExp 构造函数的无效标志”错误.据我了解,我只能对那些使用 g,m,i ——但这不能正常工作。这就是我被困在这里的原因

标签: javascript regex node.js mongodb mongoose


【解决方案1】:

您需要为您的remove 调用提供回调,或者在它返回的查询对象上调用exec 以实际执行删除操作。

所以要么:

Chat.remove({"msg":{$regex: new RegExp('.*' + myInput, 'i')}}, (err) => {...});

或者

Chat.remove({"msg":{$regex: new RegExp('.*' + myInput, 'i')}}).exec();

关于你的正则表达式的一个注释:你不需要添加 '.*' 前缀。

【讨论】:

  • 好吧,我现在觉得很傻......只需将 .exec() 添加到它的末尾就可以了。这就是我喜欢stackoverflow的原因!这么多知识渊博的人。非常感谢!!!
猜你喜欢
  • 1970-01-01
  • 2014-06-28
  • 2012-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-27
  • 1970-01-01
相关资源
最近更新 更多