我有一个
credentials.schema.ts
文件,我在其中定义了凭据集合的架构。凭证文档创建得很好,我可以检索和删除它们。但是,在进行更新查询时,它总是返回 {acknowledged: false}
。我尝试在 mongo 控制台中运行相同的更新查询。它在那里工作。
为什么更新操作失败?
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document } from 'mongoose';
// oauth2.schema.ts
@Schema({ _id: false })
class Oauth2Creds {
@Prop({ type: String, required: false })
access_token?: string;
@Prop({ type: String, required: false })
refresh_token?: string;
}
const CredentialsSchema = SchemaFactory.createForClass(Oauth2Creds);
@Schema()
export class Oauth2 extends Document {
@Prop({ type: CredentialsSchema, required: true })
creds: Oauth2Creds;
}
export const Oauth2Schema = SchemaFactory.createForClass(Oauth2);
// simple.schema.ts
@Schema({ _id: false })
export class Simple {
@Prop()
secret: string;
}
export const CredentialSchema = SchemaFactory.createForClass(Simple);
@Schema()
export class SimpleCreds {
@Prop({ type: CredentialSchema })
creds: Simple;
}
export const SimpleCredsSchema = SchemaFactory.createForClass(SimpleCreds);
// credentials.schema.ts
@Schema({ collection: 'credentials', discriminatorKey: 'kind' })
export class Credentials {
@Prop({
type: String,
required: true,
enum: [Oauth2.name, SimpleCreds.name],
})
kind: string;
@Prop({ type: String, required: false })
type?: string;
}
// mongoCredentias.service.ts
@Injectable()
export class MongoCredentialsService {
constructor(
@InjectModel(Credentials.name)
private readonly credentialsModel: Model<Credentials>,
) {}
...
... this.credentialsModel.updateMany({_id: ObjectId("***")}, { $set : { key:val } })
}
**注意:**我正在使用 NEST JS,它内置于 @nestjs/mongoose 库中。我已附上该架构的代码。 说明 - 我有一个
credentials.schema.ts
,其中描述了凭证集合的架构。
oauth2.schema.ts
和 simple.schema.ts
是包含微分器类型类的两个文件。
如果需要通过
_id
更新,可以使用功能findByIdAndUpdate()
功能。
由于只能有 1 个具有特定
_id
的 mongodb 文档,因此尝试使用 updateMany
毫无意义。您可以将文档中想要更新的所有键组合到一个 findByIdAndUpdate()
调用中。
this.credentialsModel.findByIdAndUpdate(ObjectId("***"), { [key]: val })
有关如何使用的更多详细信息,请参阅 https://mongoosejs.com/docs/api/model.html#Model.findByIdAndUpdate()。