2011-08-04 152 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是的,这不是一个答案,但我试图解释一个场景的问题。 –