用于搜索任何db.item.tags是否包含在给定字符串中的最佳数据库/解决方案

时间:2014-01-28 16:34:06

标签: node.js mongodb search-engine database

标题可能令人困惑 - 让我解释一下:

我必须以这样的格式存储数据(此示例为mongoDB格式):

{
    name: 'entity1',
    field: 'value',
    tags: ['tag1','tag2','tag3'],
}

现在我需要这样的功能:

function(text){
    // find all entities where text contains at least one of entity tags
}
  1. 通常标签数量不应大于5.
  2. 实体数量不应大于100,但将来可能会增长。
  3. 我需要"实时" - 尽可能快。
  4. 搜索必须是不区分大小写的。
  5. 数据必须存储在某种数据库中 - 当更新数据库时,功能会搜索更新的实体。
  6. 我的应用程序是用node.js编写的。
  7. 如果函数返回有关每个标记的字符串位置的信息(如果找到的话),那将会很酷。
  8. 我尝试在mongoDB上完成此操作并找到使用$where查询的解决方案,但它确实对数组属性进行了工作,无论如何它都很慢。

    我正在寻找可以使用的解决方案/ db ......

1 个答案:

答案 0 :(得分:2)

由于您的问题与任何与代码相关的问题无关,而是基于缺乏知识的通用教育问题,因此您正在获得投票。所以不鼓励这类问题。当你基本上要求别人做你的功课时。

<强>答案:

MongoDB允许为数组中的字符串创建索引:

db.item.ensureIndex({ tags: 1 });

然后找到:

db.item.find({ tags: 'tag2' });

MongoDB足够聪明,可以理解它是数组,而你正在寻找数组中的值。