我有包含tags
数组的文档。我想在网站上提供基于标签的建议,所以我需要获得包含相同标签的文件+与1个标签不匹配的文件+与2个标签不匹配的文件等...
我该怎么做?
答案 0 :(得分:16)
示例集合:
db.tags.insert({"tags":["red", "tall", "cheap"]});
db.tags.insert({"tags":["blue", "tall", "expensive"]});
db.tags.insert({"tags":["blue", "little", "cheap"]});
找到包含标签“blue”的所有内容
db.tags.find({tags: { $elemMatch: { $eq: "blue" } }})
找到所有标记为“蓝色”且仅为蓝色
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"] } } ] })
答案 1 :(得分:1)
重新提出的问题是:
假设招聘信息附有搜索标签,如
招聘信息
[{_id : ObjectId(1249999493),tags : ['Location1', 'SkillSet1', 'SkillSet2', 'Someother1', 'Someother2']},
{_id : ObjectId(1249999494),tags : ['Location3', 'SkillSet1', 'SkillSet0', 'Someother4', 'Someother3']}]
现在,他希望记录有标签['Location1','SkillSet1','SkillSet0']
首先应该从查询中选择包含更多关键字的文档。较少的关键字匹配应该持久。因此,可以为搜索查询获得更合适的职位发布。
我是明智还是我需要重新表达?
答案 2 :(得分:0)
步骤:
查找包含任何指定键的匹配产品。
展开钥匙
再次发现可以在展开后过滤掉不需要的内容
通过添加密钥出现对其进行分组
排序desc以获得最相关的
[{“$ match”:{“keys”:{“$ in”:[{“$ regex”:“text”,“$ options”:“i”}}}}},{“$ unwind “:”$ keys“},{”$ match“:{”keys“:{”$ in“:[{”$ regex“:”text“,”$ options“:”i“}}}}}, {“$ group”:{“_ id”:{“productId”:“$ productId”},“relatedTags”:{“$ sum”:1}}},{“$ sort”:{“relatedTags”: - 1 },{“$ limit”:10}]