我似乎无法使用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);
答案 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