1

私は2つのデータベースを持っています:1つはmySqlにあり、もう1つはMongoDBにあり、同じデータが内部にあります...私はmySQLで次のことを行います:

Select tweet.testo From tweet Where tweet.testo like ‘%pizza%’

そしてこれは結果です:

1627 rows in set (2.79 sec) 

しかし、私がmongoで実行する場合:

Db.tweets.find({text: /pizza/ }).explain() 

これが結果です:

nscannedObjects" : 1606334,
"n" : 1169,

または私が実行する場合:

Db.tweets.find({text: /pizza/i }).explain() 

これが結果です:

"nscannedObjects" : 1606334,
"n" : 1641,

mysql / mongo findの行/ドキュメントの数が異なるのはなぜですか?

4

3 に答える 3

3

mysql/mongo find の行/ドキュメントの数が異なるのはなぜですか??

その日の太陽の温度など、1000000000000000 の理由が考えられます。

MongoDB と MySQL は 2 つの完全に別個の技術であるため、両方を同期させたい場合は、両者の間に何らかのレプリケーターが必要になります。これが事実であるかどうかについて、あなたは私たちに知らせていません。

また、私たちはあなたのコーディング、サーバーのセットアップ、ネットワークのセットアップ、その他すべてについて何も知らないので、実際にこれに答えることさえできません.

良い答えは、これが表示されている理由は、2 つの間のデータが異なるためだと言うことです...

次の違いについて:

Db.tweets.find({text: /pizza/ }).explain()

Db.tweets.find({text: /pizza/i }).explain() 

これは、MySQL がデフォルトで小文字でクエリを実行し、MongoDB (私が知っている) が大文字と小文字を区別しないためです (これiにより、大文字と小文字が区別されなくなります)。

ただし、レプリケーターについては、ここに良いものがあります: https://docs.continuent.com/wiki/display/TEDOC/Replicating+from+MySQL+to+MongoDB

于 2012-12-18T10:42:56.930 に答える
1
于 2012-12-18T16:29:10.360 に答える
0

まず、先頭にワイルドカードがあるため、SQL クエリlike '%pizza%'で文字列 'pizza' で始まるエントリを取得できない場合があります。次の SQL クエリを試して、SQL の一致するロジックと MongoDB で使用される正規表現との構文上の違いを排除してください。

Select tweet.testo From tweet Where lower(tweet.testo) like ‘%pizza%’ or lower(tweet.testo) like ‘pizza%’

免責事項: 目の前に mySQL がないので、上記の主要なワイルドカードの動作を確認できませんが、これは他の RDBMS と一致しているため、確認する価値があります。

于 2012-12-18T14:06:11.460 に答える