我使用migrate-mongo
,在尝试运行一些迁移时得到以下错误:
~$ npx migrate-mongo up
ERROR: Could not migrate up 20221201223533-add-indexes.js: Cannot create new
indexes on existing collection xxx.xxx in a multi-document transaction.
MongoServerError: Cannot create new indexes on existing collection xxx.xxx in
a multi-document transaction.
在谷歌上搜索这个错误,没有任何结果。类似的问题还有"不能在多文档事务中做xyz";似乎表明集合需要在运行事务之前存在。我已经检查并再次检查以确保集合存在,但仍然得到上述错误。
我的代码看起来像这样:
exports.up = async (db, client) => {
const fooCollection = db.collection('foo')
const barCollection = db.collection('bar')
const session = client.startSession();
try {
await session.withTransaction(async () => {
await fooCollection.createIndex({ foo: 1 }, { session });
await barCollection.createIndex({ bar: 1 }, { session });
});
} finally {
await session.endSession();
}
}
exports.down = async (db, client) => { ... }
如何在事务中创建新索引?
感谢@user20042973指出解释这个问题的文档。
当在事务[1]中创建索引时,要创建的索引必须位于以下两个位置:
一个不存在的集合。集合是作为操作的一部分创建的。
在同一事务中创建的新空集合。
虽然这很令人失望,但显然不可能在事务中为现有的非空集合创建索引。