带排序的复合索引
Compound index with sort
下面是我的query/index。当我以这种方式设置时,mongo 会收到递归锁条目的垃圾邮件。
查询:
this._db.findAndModify(
{
name: jobName,
disabled: { $ne: true },
nextRunAt: {$lte: this._nextScanAt},
$or: [
{lockedAt: null},
{lockedAt: {$exists: false}},
{lockedAt: {$lte: lockDeadline}}
]
},
{'priority': -1},
{$set: {lockedAt: now}},
{'new': true},
findJobsResultWrapper(this, cb)
);
索引:
{name: 1, disabled: 1, nextRunAt: 1, lockedAt: 1}
.......
如果我删除 {'priority': -1} 并替换它 {} 然后一切正常。所以我似乎无法破解带有排序字段的复合索引的代码。
我也试过:
{name: 1, disabled: 1, nextRunAt: 1, lockedAt: 1, priority: -1}
和
{priority: -1}
{name: 1, disabled: 1, nextRunAt: 1, lockedAt: 1}
无论我做什么,如果我将那种类型放在那里,那么数据库就会停止运行。
谢谢!
通过执行以下操作,运行 查询时我能够消除任何递归锁:
- 优先作为查询中的第一个字段
- 优先作为索引中的第一个字段
我尝试移动优先级字段的位置,我尝试将优先级作为其自己的排序索引,但是查找和修改想要对查找和排序使用相同的查询,并且优先级必须在每个中,以便他们可以使用相同的索引。
查询:
this._db.findAndModify(
{
priority: {$exists: true},
name: jobName,
disabled: { $ne: true },
nextRunAt: {$lte: this._nextScanAt},
$or: [
{lockedAt: null},
{lockedAt: {$exists: false}},
{lockedAt: {$lte: lockDeadline}}
]
},
{priority: -1},
{$set: {lockedAt: now}},
{'new': true},
findJobsResultWrapper(this, cb)
);
索引:
{priority: -1, name: 1, disabled: 1, nextRunAt: 1, lockedAt: 1}
下面是我的query/index。当我以这种方式设置时,mongo 会收到递归锁条目的垃圾邮件。
查询:
this._db.findAndModify(
{
name: jobName,
disabled: { $ne: true },
nextRunAt: {$lte: this._nextScanAt},
$or: [
{lockedAt: null},
{lockedAt: {$exists: false}},
{lockedAt: {$lte: lockDeadline}}
]
},
{'priority': -1},
{$set: {lockedAt: now}},
{'new': true},
findJobsResultWrapper(this, cb)
);
索引:
{name: 1, disabled: 1, nextRunAt: 1, lockedAt: 1}
....... 如果我删除 {'priority': -1} 并替换它 {} 然后一切正常。所以我似乎无法破解带有排序字段的复合索引的代码。
我也试过:
{name: 1, disabled: 1, nextRunAt: 1, lockedAt: 1, priority: -1}
和
{priority: -1}
{name: 1, disabled: 1, nextRunAt: 1, lockedAt: 1}
无论我做什么,如果我将那种类型放在那里,那么数据库就会停止运行。
谢谢!
通过执行以下操作,运行 查询时我能够消除任何递归锁:
- 优先作为查询中的第一个字段
- 优先作为索引中的第一个字段
我尝试移动优先级字段的位置,我尝试将优先级作为其自己的排序索引,但是查找和修改想要对查找和排序使用相同的查询,并且优先级必须在每个中,以便他们可以使用相同的索引。
查询:
this._db.findAndModify(
{
priority: {$exists: true},
name: jobName,
disabled: { $ne: true },
nextRunAt: {$lte: this._nextScanAt},
$or: [
{lockedAt: null},
{lockedAt: {$exists: false}},
{lockedAt: {$lte: lockDeadline}}
]
},
{priority: -1},
{$set: {lockedAt: now}},
{'new': true},
findJobsResultWrapper(this, cb)
);
索引:
{priority: -1, name: 1, disabled: 1, nextRunAt: 1, lockedAt: 1}