【问题标题】:Fuzzy Searching a Non-Strict Mongoose Model模糊搜索非严格猫鼬模型
【发布时间】:2015-06-15 11:43:01
【问题描述】:

如果有什么好的方法可以做到这一点,我正在徘徊。我有一个应用程序对具有自定义字段的文档使用非严格模式。用户需要能够创建自定义字段,向特定文档添加一些信息,例如该字段是customfield: {name: 'test', foo: 'bar'}。当执行像testbar 这样的搜索时,他们应该想出这个对象。文档的数量可能会变得非常庞大,并且具有深度嵌套的子文档。

感谢您的帮助!到目前为止,我已经尝试过 elmongo 和 mongoosatstic 无济于事。如果我以错误的方式处理这个问题,请告诉我,我很乐意提出建议。

【问题讨论】:

    标签: node.js mongodb mongoose custom-fields fuzzy-search


    【解决方案1】:

    如果没有 JavaScript 处理(例如 $where 可用的内容),确实没有一个很好的方法可以做到这一点。考虑到这种评估不能可能使用“索引”,这是对任何数据库系统的“查询”的最大优化。

    考虑您的示例:

    { 
        "customField": {
            "name": "test",
            "foo": "bar"
        }
    }
    

    如果您想在此处搜索“test”或“bar”,您需要这样做:

    db.collection.find(function() {
        var doc = this;
        return Object.keys(doc).some(function(key) {
            return doc[key] == "test" || doc[key] == "bar";
        });
    })
    

    更好的方法是使用“数据点”作为“键”并在数组中的条目上创建“扁平属性”:

    {
        "customFields": [
            { "name": "name", "data": "test" },
            { "name": "foo",  "data": "bar" }
        ]
    }
    

    然后您可以在集合上创建一个简单的“索引”,例如:

    db.collection.ensureIndex({ "customFields.data": 1 })
    

    然后发出这样的查询:

    db.collection.find({ "customFields.data": { "$in": [ "test", "bar" ] } })
    

    它会有效地查找信息,而不需要处理集合中的每个文档来查看所需条件是否匹配。它可以在“索引”中找到它们。

    【讨论】:

      猜你喜欢
      • 2021-09-19
      • 1970-01-01
      • 2015-07-28
      • 1970-01-01
      • 1970-01-01
      • 2017-10-05
      • 2018-03-04
      • 2018-07-15
      • 2014-12-09
      相关资源
      最近更新 更多