1

这个问题有点奇怪,但我在我当前的实现中碰到了它:

我想对我的应用程序中的所有内容进行特权插入,我想到命令 $hint 也可以用来让 mongo 不使用索引。

那可能吗?考虑到 $hint 应该做什么,这是一个合理的问题吗?

谢谢

4

2 回答 2

6

要强制查询优化器不使用索引(进行表扫描),请使用:

db.collection.find().hint({$natural:1})

不过,不确定这是否能达到您想要的效果(将插入优先于其他活动)。

于 2012-12-12T12:37:02.650 回答
5

我认为插入的工作方式与您的想法不同。

插入将根据集合本身的索引数量将其需要的字段编入 btree。因此,要获得特权插入,您必须销毁集合上的所有索引。

因此,使用$natural顺序提示对读写顺序没有影响。更不用说$naturalorder 是磁盘插入索引,只是一个您无法在查询中有效使用的索引,因此它将强制进行全表扫描。

但是,这实际上并没有任何特权,因为维护 btree 是插入数据的一部分,因此无法通过索引来确定插入的优先级。

此外,写锁和读锁是两个完全不同的东西,所以我再次不确定你的问题是否有意义。

您是否更喜欢寻找原子锁以确保在读取数据之前更新或放入数据?

于 2012-12-12T13:01:18.553 回答