2013-05-29 161 views
0

我有幾個有這樣的字符串的集合。

這是一個很酷的存貨。 $ AAPL。我們來買吧。 這是一個很酷的存貨。 $ MSFT。我們來買吧。 這是一個很酷的存貨。 $ GOOG。我們來買吧。

如何找到APPL一個。

我使用類似db.collection_name.find(fieldname:/ $ AAPL /)的東西,但它不喜歡美元符號。如果我在沒有$的情況下運行它,它可以正常工作。但是我只想要$ AAPL在文本中的結果。

乾杯。

回答

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"}); 
2

$是正則表達式中的特殊字符;它匹配原始字符串的結尾。

要匹配文字$字符,你需要用反斜線轉義:

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