我想做一个交易,我正在使用findOneAndUpdate,我得到以下错误:“MongoServerError:Transaction numbers are only allowed on a replica set member or mongos”。我该怎么办?
app.module.ts:
imports...
@Module({
imports: [
...,
MongooseModule.forRoot(process.env.URL_DATABASE, {
useNewUrlParser: true,
useUnifiedTopology: true,
retryAttempts: 2,
}),
],
controllers: [AppController],
providers: [
AppService,
],
})
export class AppModule {}
字符串
my.service.ts:
import { Connection } from "mongoose"
export class MyService {
constructor(
@InjectModel(User.name)
private userModel: Model<UserDocument>,
@InjectConnection() private readonly connection: Connection,
) {}
}
async delete(idPa: string): Promise<boolean> {
let result = false;
const session = await this.connection.startSession();
try {
await session.withTransaction(async () => {
await this.userModel.findOneAndUpdate(
{ _id: idPa },
{ status: false },
{ session },
);
});
result = true;
} finally {
await session.endSession();
}
}
型
因此,当从控制器运行我的服务时,我得到:MongoServerError:Transaction numbers are only allowed on a replica set member or mongos.
1条答案
按热度按时间2g32fytz1#
我终于找到了解决方案,事实证明,我必须对我的数据库进行额外的配置,即“副本集”。
请按照以下步骤操作:
1.安装mongosh
1.创建3个目录。
1.执行以下命令:
注意:对于这些命令中的每一个,打开一个新的cmd
1.打开一个新的cmd并打开父目录:
cmd mongosh --port 27017
一旦进入。按照这些步骤。
rs.initiate()
个rs.reconfig({ _id: "rs0", members: [{ _id: 0, host: "127.0.0.1:27017" }, { _id: 1, host: "127.0.0.1:27018" }, { _id: 2, host: "127.0.0.1:27019" }] }, {force:true});
个然后转到子节点27018和27019,并添加以下命令。
节点27018执行步骤:
mongosh --port 27018
个db.getMongo().setReadPref('secondary')
个节点27019转到步骤:
mongosh --port 27019
个db.getMongo().setReadPref('secondary')
个最后,再次执行事务,我的app.module.ts仍然保持不变,记住本地连接将始终为127.0.0.1