【发布时间】:2021-03-19 04:21:51
【问题描述】:
我一直在尝试使用包含恢复数据查询,我的第一个模型是“块”,它与称为“站点”的命运模型具有“hasMany”关系。好吧,通常这会按预期工作,但这次它有一个问题,数据使用 ObjectID() 存储在 mongodb 中,所以如果我尝试在 robo3t 或其他任何地方查询它,我必须将 ObjectId 和 ID 本身放在文件。
我在 loopback 4 文档中发现,如果我要保存或关联使用 objectId 存储的数据,我必须设置属性 dataType:ObjectId,但仍然无法正常工作。
我的积木模型:
import {Entity, model, property, hasMany} from '@loopback/repository';
import {Site} from './site.model';
@model({
settings: {
strict: false,
mongodb: {
collection: 'bloques',
},
},
})
export class Block extends Entity {
@property({
type: 'string',
id: true,
defaultFn: 'uuidv4',
mongodb: {dataType: 'ObjectId'},
})
id: string;
@property({
type: 'date',
required: true,
})
dateBlock: string;
@property({
type: 'object',
required: true,
})
statuses: object;
@hasMany(() => Site)
minedIds: Site[];
/* @hasMany(() => Site)
minedIds: Site[];*/
[prop: string]: any;
constructor(data?: Partial<Block>) {
super(data);
}
}
export interface BlockRelations {
// describe navigational properties here
}
export type BlockWithRelations = Block & BlockRelations;
我的站点模型:
import {Entity, hasMany, model, property} from '@loopback/repository';
import {CachimbaModel} from './cachimba-model.model';
@model({
settings: {
// model definition goes in here
mongodb: {collection: 'minadas'},
},
})
export class Site extends Entity {
@property({
type: 'string',
id: true,
generated: true,
mongodb: {dataType: 'ObjectId'},
})
id?: string;
@property({
type: 'date',
required: true,
})
lastUpdate: string;
@property({
type: 'string',
required: true,
})
name: string;
@property({
type: 'string',
required: true,
})
logo: string;
@hasMany(() => CachimbaModel)
data: CachimbaModel[];
@property({
type: 'string',
dataType: 'ObjectId',
})
blockId?: string;
constructor(data?: Partial<Site>) {
super(data);
}
}
export interface SiteRelations {
// describe navigational properties here
}
export type SiteWithRelations = Site & SiteRelations;
它们各自的repos如下: 区块回购
import {Getter, inject} from '@loopback/core';
import {DefaultCrudRepository, repository, HasManyRepositoryFactory} from '@loopback/repository';
import {DbDataSource} from '../datasources';
import {Block, BlockRelations, Site} from '../models';
import {SiteRepository} from './site.repository';
export class BlockRepository extends DefaultCrudRepository<
Block,
typeof Block.prototype.id,
BlockRelations
> {
public readonly minedIds: HasManyRepositoryFactory<Site, typeof Block.prototype.id>;
constructor(
@inject('datasources.DbDataSource') dataSource: DbDataSource,
@repository.getter('SiteRepository')
protected siteRepositoryGetter: Getter<SiteRepository>,
) {
super(Block, dataSource);
this.minedIds = this.createHasManyRepositoryFactoryFor('minedIds', siteRepositoryGetter,);
this.registerInclusionResolver('minedIds', this.minedIds.inclusionResolver);
}
}
网站回购
import {Getter, inject} from '@loopback/core';
import {
DefaultCrudRepository,
HasManyRepositoryFactory,
repository,
} from '@loopback/repository';
import {DbDataSource} from '../datasources';
import {CachimbaModel, Site, SiteRelations} from '../models';
import {CachimbaModelRepository} from './cachimba-model.repository';
export class SiteRepository extends DefaultCrudRepository<
Site,
typeof Site.prototype.id,
SiteRelations
> {
public readonly data: HasManyRepositoryFactory<
CachimbaModel,
typeof Site.prototype.id
>;
constructor(
@inject('datasources.DbDataSource') dataSource: DbDataSource,
@repository.getter('CachimbaModelRepository')
protected cachimbaModelRepositoryGetter: Getter<CachimbaModelRepository>,
) {
super(Site, dataSource);
this.data = this.createHasManyRepositoryFactoryFor(
'data',
cachimbaModelRepositoryGetter,
);
this.registerInclusionResolver('data', this.data.inclusionResolver);
}
}
我会真诚地为您提供帮助!提前致谢!
【问题讨论】:
标签: javascript node.js mongodb loopback loopback4