0

我有几个有这样的字符串的集合。

这是一个很酷的股票。$AAPL。让我们买吧。这是一个很酷的股票。$微软。让我们买吧。这是一个很酷的股票。$GOOG。让我们买吧。

我如何找到APPL之一。

我使用类似 db.collection_name.find(fieldname: /$AAPL/) 但它不喜欢美元符号。如果我在没有 $ 的情况下运行它,它工作正常。但我只想要 $AAPL 在文本中时的结果。

干杯。

4

2 回答 2

3

一个完整的 C# 示例:

// sample class with a property that could contain the sample string 
// in your example, "This is a cool stock. $MSFT"
public class Talk {
  public string Message { get; set; } 
}

var client = new MongoClient("mongodb://localhost");
var server = client.GetServer();
var database = server.GetDatabase("stocktalk");
var collection = database.GetCollection<Talk>("talk");

var query = Query<Talk>.EQ(m => m.Message, 
                           new BsonRegularExpression(@"\$MSFT"));
// get all of the Talk objects that match
var matches = collection.FindAs<Talk>(query);

另请注意,这通常是一个非常低效的查询,因为它需要搜索集合中的所有文档才能找到匹配项。您可能需要考虑将股票代码符号存储在一个不同的数组属性中作为文档的一部分并使用$in来查找它们(然后您可以使用索引,例如,查找匹配字符串会非常快):

public class Talk {
  public string Message { get; set; } 
  public string[] TickerSymbols { get; set; }
}

var query = Query<Talk>.In(m => m.TickerSymbols, new string[]{"$MSFT"});
于 2013-05-29T01:31:43.587 回答
2

$是正则表达式中的特殊字符;它匹配原始字符串的结尾。

要匹配文字$字符,您需要使用反斜杠对其进行转义:

db.collection_name.find(fieldname: /\$AAPL/)
于 2013-05-29T00:40:11.767 回答