我有一个方法setFirstNotDoneWordDefinitionToDone
,它得到参数id: mongoose.Types.ObjectId
和modelDefinition: string
。testerRecord.words[0].definitions[0].definition
是一个数组,如果它包含modelDefinition,那么testerRecord.words[0].definitions[0].done
必须设置为true。
async setFirstNotDoneWordDefinitionToDone(id: TId, modelDefinition: string) {
await this.db.models.tester.updateOne(
{
_id: id,
},
{
$set: {
"words.$[word].definitions.$[definition].done": true,
},
},
{
arrayFilters: [
{ "word.done": false },
{ "definition.definition": modelDefinition },
],
}
);
}
但它会抛出一个错误**“错误:在架构”**“中找不到路径“words.0.definitions.0.definition”。然而,当我开始使用第二个过滤器时,它工作得很好。举例来说:$set: { words.$[word].definitions: {} }
工作正常。
我花了很多时间在这上面,但不知道我做错了什么。
Mongoose 版本:"mongoose": "7.1.1"
TesterDto:
export class TestWordDefinitionDto {
@Prop()
definition: string[];
@Prop()
done: boolean;
}
export class TestWordDto {
@Prop()
term: string;
@Prop([TestWordDefinitionDto])
definitions: TestWordDefinitionDto[];
@Prop()
done: boolean;
}
export class TesterForCreateDto {
@Prop({
required: true,
type: MongooseSchema.Types.ObjectId,
ref: UserDto.name,
})
userId: TId;
@Prop([TestWordDto])
words: TestWordDto[];
}
@Schema({
collection: "testers",
timestamps: { createdAt: true, updatedAt: false },
})
export class TesterDto extends TesterForCreateDto {
_id: TId;
}
Schema仅从TesterDto创建。
来自db的文件:
我会非常感激任何帮助。
1条答案
按热度按时间j9per5c41#
发现错误。Schema中出现问题。我不能用
@Prop([TestWordDto])
方式定义嵌套对象,我应该为TestWordDto创建另一个模式并将其放入Prop中。固定: