在MongoDB C#中搜索与数组中的字符串匹配的字符串模式

时间:2014-01-17 00:58:42

标签: c# .net arrays mongodb mongodb-.net-driver

我似乎无法使用C#驱动程序在MongoDB中使用它。我现在花了一段时间没有任何运气。我有一个字符串数组,我想返回包含数组中任何单词的所有mongo文档。

我从集合中获取数组字符串。阵列将包含这样的项目:[“月亮”,“牛”,“尼尔”]

我有这样的收藏品:

{_id: "xxxxx1", story:"The cow jump over the moon"}
{_id: "xxxxx2", story:"Neil Armstrong landed on the moon in the 1960s"}
{_id: "xxxxx3", story:"The moon is very bright tonight."}
{_id: "xxxxx4", story:"Itsy winchie spider climb up the spout. moon is cool."}
{_id: "xxxxx5", story:"moon"}
{_id: "xxxxx6", story:"no text match here mate"}

因此,从数组和集合中,应该发布前5个文档,因为它们包含“moon”,“cow”或“Neil”。不应返回最后一个文档,因为它不包含任何这些单词。

下面是我坚持的代码。它只返回文档xxxx5,因为它包含月亮而没有别的。我几乎在那里,但并不完全。希望有人可以提供帮助。

var userId = "12345";
var connectionString = ConfigurationManager.AppSettings["MongoDBConnectionString"];
var server = MongoServer.Create(connectionString);
var database = server.GetDatabase(ConfigurationManager.AppSettings["MongoDBDatabase"]);

var fCollection = database.GetCollection<BsonDocument>("words");
var fQuery = Query.EQ("UserId", userId);
var fDoc = fCollection.FindAs<Words>(fQuery).SetFields(Fields.Exclude("_id"));
var list = fDoc.ToList();

var words = list.Select(t => t.Word).ToArray();

var collection = database.GetCollection<BsonDocument>("stories");
var query = Query.In("story", new BsonArray(words);


var doc =     collection.Find(query).SetSortOrder(SortBy.Descending("Submitted")).Skip(skip).Take(limit);

var jsonWriterSettings = new JsonWriterSettings { OutputMode = JsonOutputMode.Strict };
return doc.ToJson(jsonWriterSettings);

2 个答案:

答案 0 :(得分:1)

在MongoDB中搜索字符串时可以使用Regex

Query.Matches("story","<Regex for: moon or cow or Neil>");

查看here以了解如何编写与多个单词匹配的正则表达式。基本上就是这样:

^(?=.*\bmoon\b)(?=.*\bcow\b)(?=.*\bNeil\b)

总结:

collection.Find(Query.Matches(
    "story",
    "^(?=.*\bmoon\b)(?=.*\bcow\b)(?=.*\bNeil\b)"))
    .SetSortOrder(SortBy.Descending("Submitted")).Skip(skip).Take(limit);

答案 1 :(得分:0)

您是否尝试过使用文字索引?这是v2.4中提供的测试版功能,您可以手动启用:http://docs.mongodb.org/manual/tutorial/enable-text-search/

有关索引本身的信息,请参阅以下内容: http://docs.mongodb.org/manual/core/index-text/

以下页面提供了文本搜索示例。 http://docs.mongodb.org/manual/reference/command/text/#dbcmd.text