Mongodb lis中最长的匹配项

2024-10-01 07:10:23 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我们在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”的一个奶酪类型之间),我可以遍历整个列表,但是有更好的方法吗?在

谢谢


Tags: 列表mongotypebuyactivityjoecheesecheddar
1条回答
网友
1楼 · 发布于 2024-10-01 07:10:23

根据您的搜索用例,您可以尝试以下结构:

{
  "name": "joe",
  "activity": "buy",
  "type": "cheese-cheddar"
}
{
  "name": "joe",
  "activity": "dontbuy",
  "type": "cheese-pepperjack"
}
{
  "name": "joe",
  "activity": "buy",
  "type": "cheese"
}
{
  "name": "joanna",
  "activity": "buy",
  "type": "cheese-cheddar"
}
{
  "name": "joanna",
  "activity": "buy",
  "type": "cheese"
}

当有人在搜索cheese-pepperjack时,您可以拆分连字符并用Python['cheese', 'cheese-pepperjack']创建一个列表。使用列表查询:

^{pr2}$

上面的查询将搜索任何值为“cheese”或“cheese pepperjack”的type。对于'joe',您可能会得到多条记录,因此您需要根据type进行排序,并限制为一条记录。另外,别忘了为type字段添加一个index。在

您还可能对以下方面感兴趣:

相关问题 更多 >