我有一个关键字对列表。我需要在mongoDB集合中找到包含任何关键字对的所有文档。
我已经在互联网上搜索了数小时来寻找答案,但是找不到。我认为我需要的是一种灵活地组合$和(因此关键字对的两个组成部分都存在于结果中),$ or(这样任何关键字对都可以满足要求)和$ text(这样我可以在词干/区分大小写等运算符上具有一定的灵活性。但是我意识到$ text运算符不能与$ and / $ or一起使用。我知道这篇文章(MongoDB Text Search AND multiple search words),但它并不能完全满足我的需求...
举个例子:
这是一个简单的演示集合:
mydb = client.XXX
mycol = mydb["XXX"]
mylist = [
{"_id": 1, "hashtag": [], "message": "PrEP is useful"},
{"_id": 2, "hashtag": [], "message": "prep1 is not what we want"},
{"_id": 3, "hashtag": ["#AIDS"], "message": "will bandaid be picked?"},
{"_id": 4, "hashtag": ["#HIV"], "message": "hiv we care" },
{"_id": 5, "hashtag": [], "message": "Aids support organization - does multi-word phrase work as it should?"},
{"_id": 6, "hashtag": [], "message": "sti"},
{"_id": 7, "hashtag": [], "message": "stis prevention"},
{"_id": 8, "hashtag": [], "message": "sti space prevention"}
]
mycol.insert_many(mylist)
我的关键词对列表如下:
k = ['"sti" "prevention"',
'"PrEP" "useful"',
'"stis" "prevention"',
'"std" "treatall"',
......]
这些是我尝试不使用“ k”的几种方法。但最终我想使用“ k”:
下面的代码块可以很好地工作,但是它不能同时搜索多个关键字对。
m = mycol.find({
'$text': {'$search': '"sti" "prevention"'},
})
for items in m:
pprint.pprint (items['message'])
我尝试在不同的地方添加$或,但是都失败了... 故障编号1:
m = mycol.find({ '$or':[
'$text': {'$search': '"sti" "prevention"'},
'$text': {'$search': '"PrEP" "useful"'}
]
})
for items in m:
pprint.pprint (items['message'])
故障2:
m = mycol.find({
'$text': {'$or':[{'$search': '"sti" "prevention"'},
{'$search': '"PrEP" "useful"'}]
}})
for items in m:
pprint.pprint (items['message'])
我的预期结果示例: 对于2个关键字对的列表['“ sti”“ prevention”','“ PrEP”“ use”'] 我应该得到ID 1、7和8。