假设我们在Mongo有一个追随者
{joe: {
grocerylist: [
{ "activity" : "buy", "type" : "cheese-cheddar" },
{ "activity" : "dontbuy", "type" : "cheese-pepperjack" },
{ "activity" : "buy", "type" : "cheese" }
]}
{joanna: {
grocerylist: [
{ "activity" : "buy", "type" : "cheese-cheddar" },
{ "activity" : "buy", "type" : "cheese" }
]}
当Joe查询“cheese pepperjack”时,应该会得到他的“dontbuy”列表。现在,当乔娜查询“奶酪胡椒杰克”时,应该会得到她的“购买”列表。因为,即使她没有在她的列表中明确列出cheese pepperjack,但该查询最长的匹配项是“cheese”,她可以购买。问题是如何在Mongo中获得最长的匹配?在
如果在python进程的内存中有上面的字典,而不是MongoDB,那么我们可以使用Trie实现来获得上面的查找。Mongo的regex/$in可以让我一次只比较一个字符串(在我的查找和“grocerylist”的一个奶酪类型之间),我可以遍历整个列表,但是有更好的方法吗?在
谢谢
根据您的搜索用例,您可以尝试以下结构:
当有人在搜索
^{pr2}$cheese-pepperjack
时,您可以拆分连字符并用Python['cheese', 'cheese-pepperjack']
创建一个列表。使用列表查询:上面的查询将搜索任何值为“cheese”或“cheese pepperjack”的
type
。对于'joe',您可能会得到多条记录,因此您需要根据type
进行排序,并限制为一条记录。另外,别忘了为type
字段添加一个index。在您还可能对以下方面感兴趣:
相关问题 更多 >
编程相关推荐