2015-06-15 4 views
0

Я блуждал, если есть хороший способ сделать это. У меня есть приложение, которое использует нестрогие схемы для документов с настраиваемыми полями. Пользователь должен иметь возможность создавать настраиваемое поле, добавлять некоторую информацию в конкретный документ, например, поле было customfield: {name: 'test', foo: 'bar'}. При выполнении поиска, например test или bar, они должны придумать этот объект. Количество документов может быть довольно большим и многочисленным и иметь глубоко вложенные поддокументы.Нечеткий поиск нестрогой модели Мангуста

Спасибо за помощь! До сих пор я пробовал elmongo и mongoosatstic безрезультатно. Дайте мне знать, если я пойду об этом неправильно, мне бы понравились предложения.

ответ

0

Существует действительно хороший способ сделать это без обработки JavaScript, такой как то, что доступно для . Это не очень хорошо, учитывая, что такая оценка не может, возможно, использовать «индекс», который является наибольшей оптимизацией для «запросов» к любой системе баз данных.

Рассмотрим ваш пример:

{ 
    "customField": { 
     "name": "test", 
     "foo": "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" ] } }) 

И будет найти информацию эффективно без обработки каждого документа в чтобы увидеть, соответствуют ли требуемые условия. Он может просто найти их в «индексе».

Смежные вопросы