0

私はMongoDBの世界に不慣れで、いくつかの基本的な質問があります。MongoDBで文字列を使って検索できるかどうか知りたかったのです。たとえば、ここにレコードがあります:

db.test.insert({s_id:0、c_id:1、json: "{result:[104192,42068]、id:1}"})

s_idで検索を行うと、正常に機能します。

db.test.findOne({s_id:0}){"_id":ObjectId( "511d1675d3c6fdeb779c8ea8")、 "s_id":0、 "c_id":1、 "json": "{result:[104192,42068]、 id:1}"}

ただし、jsonで検索を実行すると:"result"は機能しません

db.test.findOne({json: "result"})null

同時に、jsonのインデックスを確認しました

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

そのような文字列内で検索を実行することは可能ですか、それともこの上にSOLRまたはElastic Searchを作成する必要がありますか?

任意のポインタは高く評価されています

ありがとうマスティ

4

2 に答える 2

0

このリンクは、Mongoでの読み取り操作の基本をかなりよくカバーしています:http://docs.mongodb.org/manual/applications/read/

編集:より複雑なクエリを使用してMongoで検索することは、大きなデータベースでは推奨されません。定期的にそうしたい場合は、solrのようなインデックスを検討してください。Mongoは、idを使用して検索するのが最適です。

于 2013-02-14T17:23:23.783 に答える
0

したがって、jsonキーの値はシリアル化されたjsonです。'result'という単語を含むjson値を持つドキュメントを検索する場合は、$regex演算子を使用できます。レコードの数や期待するパフォーマンスを示さないため、Solr/Luceneはやり過ぎかもしれません。また、最新バージョンのMongoDBの新しいフリーテキスト検索機能を調べることもできます。

試す:

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のマニュアルから:

「$regexは、正規表現に文字列の先頭(つまり、^)のアンカーがあり、大文字と小文字が区別される一致である場合にのみ、インデックスを効率的に使用できます。」

だからあなたは実際におそらく欲しい

> 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"
}
于 2013-02-14T17:41:27.013 に答える