2011-08-04 150 views
9

我有含tags陣列的文件得到的文件。我想提供標籤上的網站基礎的建議,所以我需要得到含有相同的標籤+文件的文件不匹配不匹配2個標籤和1個標籤+文件...MongoDB的:通過標籤

我怎樣做那?

+1

考慮你說的話下面這個問題是不明確的。也許一個期望的輸出的例子會有所幫助 –

回答

12

例如集合:

db.tags.insert({"tags":["red", "tall", "cheap"]}); 
db.tags.insert({"tags":["blue", "tall", "expensive"]}); 
db.tags.insert({"tags":["blue", "little", "cheap"]}); 

找到所有標記 「藍色」

db.tags.find({tags: "blue"}) 

找到所有標記 「藍色」 和 「便宜」

db.tags.find({ tags: { $all: ["cheap", "blue"] } }) 

找到所有不是 「藍」

db.tags.find({tags: { $ne: "blue" } }) 

找到所有「藍色」和「便宜」但不是「紅色」而不是「高」

不可能在我的mongo db中。從一些MongoDB的1.9.1像這應該工作,雖然(未測試):

db.tags.find({ $and: [ {tags: { $all: ["blue", "cheap"] } }, { tags: { $nin: ["red", "tall"] } } ] }) 
+2

你沒有得到想法。我不需要完全匹配。我希望所有包含至少一個標籤的文檔按其包含的原始標籤的數量排序。 – Daniel

+1

你會不會更精確地提出問題呢? – rompetroll

+0

我以爲我做了:( – Daniel

0

步驟:

  1. 發現包含任何指定按鍵的配套產品。

  2. 展開上的按鍵

  3. 不要再次找到來過濾不需要展開

  4. 他們組加上關鍵字發生

  5. 排序倒序後能得到最相關的第一

[{「$ match」:{「keys」:{「$ in」:[{「$ regex」:「text」,「$ options」:「i」}]}}},{「$ un風「:」$ keys「},{」$ match「:{」keys「:{」$ in「:[{」$ regex「:」text「,」$ options「:」i「}]}}} ,{「$ group」:{「_id」:{「productId」:「$ productId」},「relatedTags」:{「$ sum」:1}}},{「$ sort」:{「relatedTags」 1}},{ 「$極限」:10}]

1

的轉述的問題是:

假設,如果招聘廣告有附加像

工作職位,

[{_id : ObjectId(1249999493),tags : ['Location1', 'SkillSet1', 'SkillSet2', 'Someother1', 'Someother2']}, 
{_id : ObjectId(1249999494),tags : ['Location3', 'SkillSet1', 'SkillSet0', 'Someother4', 'Someother3']}] 

現在的搜索標籤,他希望記錄具有標籤['Location1','SkillSet1','SkillSet0']

,並具有從查詢更多的關鍵詞選擇的文檔應該是第一位的。更少的關鍵字匹配應該最後。所以,那個人可以爲搜索查詢獲得更合適的職位發佈。

上午我懂事還是需要重新句話?

+0

對我來說這看起來很合適,看起來*** 4年前的問題***更多地討論了過濾結果而不是創建搜索參數。 – monsto

+0

這不是一個答案.. – nilsi

+0

@nilsi是的,這不是一個答案,但我試圖解釋一個場景的問題。 –