1

我有 2 个数据库:一个在 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 find 中的行数/文档数不同?

4

3 回答 3

3

为什么mysql/mongo find 中的行数/文档数不一样??

可能有 1000000000000000 个原因,包括那一天的太阳温度。

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

于 2012-12-18T10:42:56.930 回答
1
于 2012-12-18T16:29:10.360 回答
0

首先,您的 SQL 查询like '%pizza%'可能不会拾取以字符串 'pizza' 开头的条目,因为前面有通配符。尝试以下 SQL 查询以排除与 SQL 中的匹配逻辑和 MongoDB 使用的 Regex 的任何语法差异

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 回答