在mongodb的美元符号

时间:2013-05-29 00:38:24

标签: c# mongodb

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

这是一个很酷的股票。 $ AAPL。我们来买吧。 这是一个很酷的股票。 $ MSFT。我们来买吧。 这是一个很酷的股票。 $ GOOG。我们来买吧。

如何找到APPL。

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

干杯。

2 个答案:

答案 0 :(得分: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"});

答案 1 :(得分:2)

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

要匹配文字$字符,您需要使用反斜杠转义它:

db.collection_name.find(fieldname: /\$AAPL/)