如何在Mongo中查找数据?

时间:2016-03-18 11:11:22

标签: c# regex mongodb

以下算法查找<password>(XML格式的字符串)字段中具有info条目的所有文档

db.getCollection('products').find({info:{$regex: /<password>/}});

passwordRecords有0个元素。我在哪里弄错了?在Mongo中更新数据是正确的方法吗?

1 个答案:

答案 0 :(得分:2)

这里有一些事情需要考虑。

  • 不要在C#正则表达式中使用正则表达式分隔符(删除外部/.../
  • 如果/是您想要在输入字符串中匹配的斜杠,则它应该采用模式
  • 您的字符串可与(?si)<([^\s<]*password[^\s<]*)>.*?</\1>模式匹配,并替换为<$1></$1>Regex.Replace(r.info, @"(?si)<([^\s<]*password[^\s<]*)>.*?</\1>", "<$1></$1>");

我建议的模式包含两件感兴趣的东西:

  • (?si) - DOTALL(单线)模式也强制.匹配换行符,并且还启用不区分大小写的匹配模式
  • ([^\s<]*password[^\s<]*) - 捕获包含password的节点名称(节点只有名称,没有属性)
  • .*? - 匹配任何0+个字符,尽可能少到下一个必需的子模式
  • </\1> - 匹配与组1匹配的最近对应标记。因此,这不会匹配任何嵌套标记。

请参阅regex demo

enter image description here