2013-02-14 2 views
0

Я новичок в мире MongoDB и задаю основные вопросы. Я хотел выяснить, можно ли искать строку в MongoDB. Например здесь есть запись:Поиск в MongoDB внутри строки

db.test.insert ({s_id: 0, c_id: 1, JSON: "{результат: [104192,42068], ID: 1}"})

Когда я находку на s_id она отлично работает:

db.test.findOne ({s_id: 0}) { "_id": ObjectId ("511d1675d3c6fdeb779c8ea8"), "s_id" : 0, "c_id": 1, "json": "{результат: [104192,42068], id: 1}" }

Однако, если я находку на JSON: "результат" не работает

db.test.findOne ({JSon: "результат"}) нуль

в то же время я сделал обеспечить индекс на

JSON

db.test.ensureIndex ({JSON: 1})

Возможно ли выполнить поиск по такой строке внутри или нам нужно создать SOLR или Elastic Search поверх этого?

Любые указатели высоко ценятся

Thanks Masti

ответ

0

Значения для вашего ключа json являются сериализованными json. Если вы ищете документы, содержащие значения json, содержащие слово «результат», вы можете использовать оператор $ regex. Вы не указываете, сколько записей у вас есть или какую производительность вы ожидаете, поэтому, возможно, Solr/Lucene может быть излишним. Вы также можете посмотреть новые функции бесплатного текстового поиска в самой последней версии MongoDB.

Try:

db.test.find({json:/result:/i}); 

На моей машине:

> db.test.insert({ s_id:0, c_id:1, json:"{result:[104192,42068],id:1}" }) 
> db.test.find({json:/result:/i}); 
{ "_id" : ObjectId("511d21fe0ff85d1b95a5f8b1"), "s_id" : 0, "c_id" : 1, "json" : "{result:[104192,42068],id:1}" } 

Кстати, из руководства MongoDB:

«$ регулярное выражение можно использовать только индекс эффективно, когда регулярное выражение имеет якорь для начала (т.е.^) Строки и чувствительный к регистру матч»

Так что вы на самом деле, вероятно, хотите

> db.test.ensureIndex({json:1}) 
> db.test.find({json:{ $regex:'^{result:'}}).explain(); 
{ 
    "cursor" : "BtreeCursor json_1 multi", 
    "isMultiKey" : false, 
    "n" : 1, 
    "nscannedObjects" : 1, 
    "nscanned" : 1, 
    "nscannedObjectsAllPlans" : 1, 
    "nscannedAllPlans" : 1, 
    "scanAndOrder" : false, 
    "indexOnly" : false, 
    "nYields" : 0, 
    "nChunkSkips" : 0, 
    "millis" : 0, 
    "indexBounds" : { 
     "json" : [ 
      [ 
       "", 
       { 

       } 
      ], 
      [ 
       /^{result:/, 
       /^{result:/ 
      ] 
     ] 
    }, 
    "server" : "Micks-MacBook-Pro-3.local:27017" 
} 
+0

Обратите внимание, что в дополнение к этому есть новодобавленный функция поиска текста. Вот ссылка на блог после демонстрации этой новой функции: http://blog.mongodb.org/post/40513621310/mongodb-text-search-experimental-feature-in-mongodb – ACE

+0

Отсюда мой комментарий в первом параграфе моего ответа :) –

0

Эта ссылка охватывает чтения основы операции в Монго, а также: http://docs.mongodb.org/manual/applications/read/

Edit: Поиск в Монго с использованием более сложных запросов не рекомендуется в больших базы данных. Если вы регулярно этого хотите, рассмотрите индекс, например, solr. Монго лучше всего искать с использованием id.

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