我有2个dbs:一个在mySql中,另一个在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中的行数/文件数不同?
答案 0 :(得分:3)
为什么mysql / mongo中的行数/文件数不同?
可能有1000亿个原因,包括当天的太阳温度。
MongoDB和MySQL是两个完全独立的技术,如果你希望保持同步,你需要在两者之间使用某种复制器。您还没有让我们知道是否是这种情况。
此外,我们不知道您的编码,服务器设置,网络设置以及其他所有内容,所以我们甚至无法开始回答这个问题。
一个好的答案是说你看到这个的原因是因为两者之间的数据不同......
至于:
之间的区别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
答案 1 :(得分:1)
mysql命令
Select tweet.testo From tweet Where tweet.testo like ‘%pizza%’
等同于MongoDB的
Db.tweets.find({text: /pizza/i })
我意识到它们都包含相同的数据,但在某些情况下,mysql中的文本被截断,因此返回的行数较少。
答案 2 :(得分: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一致,因此值得检查