【发布时间】:2012-02-10 13:20:26
【问题描述】:
如果我们有
Blog{
Name 'Blog1'
Tags ['testing','visual-studio','2010','c#']
}
Blog{
Name 'Blog2'
Tags ['parallel','microsoft','c#']
}
通过控制台,我们可以执行并找到包含一些提供的标签的所有博客文章:
db.BlogPost.find({ 'Tags' : { '$regex' : ['/^Test/', '/^microsoft/', '/^visual/', '/^studio/', '/^c#/'] } });
我们如何在 c# 10gens 驱动程序中编写相同的查询? 如果不能通过 10gens c# 驱动写,有什么办法吗?
Query.Match 仅支持一种正则表达式。我们能不能给他提供多个正则表达式,或者我们应该结合起来
Query.Or(Query.Match("Test"), Query.Match("Micro"), Query.Match("Visual"))
我已经设法解决了 我已经设法做到了
{ "$or" : [{ "Tags" : /^programm/i }, { "Tags" : /^microsoft/i }, { "Tags" : /^visual/i }, { "Tags" : /^studio/i }, { "Tags" : /^assert/i }, { "Tags" : /^2010/i }, { "Tags" : /^c#/i }] }
但有件事告诉我,这是一个丑陋的 hack,可能会导致性能问题。小伙伴们怎么看?
问题的最终答案可以在以下位置找到: Official mongodb forum
【问题讨论】:
-
这实际上行不通。在控制台中使用正则表达式文字,你不应该引用你的正则表达式——换句话说,使用
/^Test/而不是'/^Test/' -
提供的查询在通过 mongo 控制台执行时有效。问题是我无法通过支持多关键字正则表达式搜索的 c# 驱动程序创建 mongo 查询。
-
@MarjanNikolovski 你是怎么解决的?谢谢;)
标签: mongodb mongodb-.net-driver