2017-05-04 94 views
0

MongoDB 3.4

我有一個變量的值。 VAL1 =「黑暗堡壘」

我需要的文檔時我文字中使用了可變MongoDB:文本搜索(完全匹配)使用變量

搜索集合中的一個集合存儲搜索(與名稱字段中的文本索引)爲

db.stores.insert([ 
    { _id: 1, name: "Java Hut", description: "Coffee and cakes" }, 
    { _id: 2, name: "Burger Buns", description: "Gourmet hamburgers" }, 
    { _id: 3, name: "Coffee Shop", description: "Just coffee" }, 
    { _id: 4, name: "Fort Coffee", description: "Discount clothing" }, 
    { _id: 5, name: "Java Shopping", description: "Indonesian goods" } 
]) 


db.City.find({$text:{$search: val1}}) 

它返回_id:4文件,因爲它包含Fort。

我需要做一個完全匹配,但使用變量。

上面的搜索應該只返回時VAL1 =「堡壘咖啡」

+0

db.City.find({名稱:VAL1})使用此 –

+0

但我需要做一個文本搜索。 –

回答

2

當你做文本搜索,它有一個像標化工作,分析字的最低杆許多內部步驟(例如,以配合烹調&因爲兩者都來自基礎工作「廚師」)。如果您期待完全匹配,那麼您實際上並不是在尋找文本搜索,而是在尋找正常的查詢。

因此,

如果你這樣做:

db.City.find({$text:{$search: "Fort Minor"}}) 

它會試圖找到其中有炮臺,未成年人,少數民族,forting等,在它的所有文件。

如果您做如下:

db.City.find({ name : "Fort Minor"}) 

如果會給你精確匹配的文件。

然而,這裏是漁獲:

如果你搜索所有的小寫字母,如:

db.City.find({ name : "fort minor"}) 

它不會給你你期待什麼。

要解決這個問題,去正則表達式:

db.user.find({ name: /^Fort Minor$/i }); 
+0

我需要使用變量進行比較。我無法硬編碼值。 –

+0

你可以通過串聯的用戶變量..這只是一個例子 –

+0

我可以在文本搜索查詢中使用一個變量嗎? –