如何使用mongodb在typegraphql中存储引用的子文档?

问题描述

我有一个集合名称Shop,另一个是成员。我想在收集店中存储数据 结构为:

@ObjectType('ShopType')
@InputType('ShopInput')
@Entity()
 class Shop{

    @Field(() => String,{ nullable: false })
    @prop({ unique: true,required: true })
    public id!: string;

    @Field(() => String,{ nullable: false })
    @prop({ unique: false,required: true })
    public name!: string;

    @Field(() => String,required: true })
    public logo_url!: string;

    @Field(() => String,required: true })
    public registration_no!: string;

    @Field(type => [Memeber],{ nullable: true })
    @prop({
    unique: false,required: false,ref: () => [Memeber],type: () => [Schema.Types.Mixed].  // Taken from package mongoose
     })
    public members?: Ref<Memeber>[];

   }

与会员收藏相同

但是我遇到了错误

商店验证失败:memebers.0:对值“ Document {\ n id:>'emp1.1',\ n类别:'waiter'的强制转换为ObjectId ',\ n名称:'3',\ n join_date:1600279449}“位于路径” memebers“,>成员:'3',\ n join_date:1600279449}”位于路径“ memebers”,成员: 值“ [成员{\ n id:'emp1.1',\ n
类别:“服务员”,\ n owner_id:“ 3”,\ n加入日期:1600279449} ]”位于路径“成员”处

解决方法

对不起,我解决了这个问题,因为我主要专注于使用typeorm来完成这项工作,但是正是goose创造了模型。 下面的代码可参考该解决方案:-

用于模型公司(父文档)

   import { getModelForClass,prop } from '@typegoose/typegoose';
   @ObjectType('CompanyType')
   @InputType('CompanyInput')
   @Entity('company')
   class Company{
   @Field(() => [Company] || null,{ nullable: true })
   @prop({
          unique: false,required: false,autocomplete: true,default: [],ref: 'Branch'
         })
         public branches?: Ref<Branch>[];
        
     }

对于Model Branch(参考子文档)

   import { getModelForClass,prop } from '@typegoose/typegoose';
   @ObjectType('BranchType')
   @InputType('BranchInput')
   @Entity('branch')
   class Branch{
        @Field(() => Int,{ nullable: true })
        @prop({
                unique: false,})
        @PrimaryGeneratedColumn('increment')
        public id: number;
    }

“ ref”以上是且永不做ref:()=>模型或ref:模型。 上面的代码也是MongoDB中引用子文档的示例,该示例将在create()或insertMany()上给出如下结果:-

{
branches: [ObjectId("Some pattern"),...]

}

这里的ObjectId是引用ID或ObjectId(_id),对于集合中的每个文档都是唯一的。 有关更多信息,请参考https://typegoose.github.io/typegoose/,对于ORM https://typeorm.io/#/

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...