如何在模型上使用到另一个模型
How to use on model into another model
我有两个独立的模型,名称为员工和用户,具有一些通用数据和一个 accountId,彼此 link。每个型号一条记录如下:
Employee
_id:1639137618164
name:"*****"
sites:Array
company:”Software”
jobTitle: “Associate Software Engineer”
email:"*****"
phonesms:"1"
phonevoice:"1"
licenseNumber:""
avatarStamp:0
pined:false
accountId: 1639129314021 //link attribute
countryCodeSms:"US"
countryCodeVoice:"US"
inviteCode:"09611"
emergencyRoles: Object
invite: "booksRbUoSM"
用户是
_id:1639129314021
firstName:"*** ***"
lastName:"****"
companyName:"SITS"
passwordReset:""
activated:true
accountId:1639129314021 // link attribute
siteId:-1
role:0
last:1639137913873
blocked:false
blockedtext:""
trialend:1640338913781
paytype:1
hashAccess:Array
emergencyEnabled:false
visitorTypes:Array
sitesLimit:2
manualCreation:false
username:"*************"
password:"**********************************"
email:"*********************"
passwordNotification:true
passwordLifecycle:1646906375986
isNewUser:true
listFeature:Object
我想从用户模型中搜索该 accountId 是否存在任何员工,如果有员工与 accountId 关联,则添加具有可用公共数据的新员工。否则不会。我怎样才能在环回中做到这一点。我被困在这里了!
尝试以下
var employee_data = Employee .filter(x => User.map(y => y.accountId).includes(x.accountId));
我想你正在使用猫鼬并且你的 User
模型中有这部分:
accountId: {
type: mongoose.Schema.ObjectId,
ref: 'Employee',
required: [true, 'this field must be provided']
},
您可以将 populate
方法添加到您的架构中,以便在您每次使用 User.find(), findOne,
和所有其他以 'find'[= 开头的方法请求数据时添加相关模型的数据18=]
userSchema.pre(/^find/, function(next) {
this.populate({
path: 'accountId',
options: { // you can populate only some fields if you want
select: 'name company jobTitle'
}
})
next()
})
然后,您可以像往常一样使用您的 User
模型,但现在添加了相关的 Employee
数据:
const given_id = "65465458qw7d7q1q7w1x"
const user = await User.findOne({accountId: given_id})
// Note: you can use User.find if there can be
// more than one user with that accountId.
环回 4
解决方案 1:
在您有权访问 UserRepository 的用户控制器中
假设您知道 accountId 并且仅当您有员工记录时accountId 才存在,您可以有一个方法
@get('/users/{accountId})
async findUserWhoIsAnEmployee(@param.path.string('accountId') accountId: string){
return this.userRepository.findOne({where: {accountId}})
}
假设您不知道 accountId...
您可以访问 UserController 中的员工存储库,方法是将其作为构造函数中的参数传递并查找用户,然后签入员工记录。 (不是最优的,因为将在您的数据库上进行两次查询)
export class UserController{
constructor(
@repository(UserRepository) public userRepository: UserRepository,
@repository(EmployeeRepository) private employeeRepository: EmployeeRepository
)
// returns employee record or null if none
@get('/users/{id}/employee-record)
async findUserWhoIsAnEmployee(@param.path.string('id') id: string){
const user = await this.userRepository.findById(id);
return (!user) ? null : this.employeeRepository.findOne({where: {accountId: user.accountId}})
}
}
解决方案 2:
用户和员工模型之间存在关系(hasOne,最好是)
您可以在该用户上找到该员工记录
// returns employee record of a user if exists
@get('/users/{id})
async findUserWhoIsAnEmployee(@param.path.string('id') id: string){
return this.userRepository.findById(id).employeeRecord()
}
//Where employeeRecord is a reference property on the user Model.
我正在使用环回版本 2.x.x。原来很简单
currentModel.app.models.modelYouWantToAccess
我有两个独立的模型,名称为员工和用户,具有一些通用数据和一个 accountId,彼此 link。每个型号一条记录如下:
Employee
_id:1639137618164
name:"*****"
sites:Array
company:”Software”
jobTitle: “Associate Software Engineer”
email:"*****"
phonesms:"1"
phonevoice:"1"
licenseNumber:""
avatarStamp:0
pined:false
accountId: 1639129314021 //link attribute
countryCodeSms:"US"
countryCodeVoice:"US"
inviteCode:"09611"
emergencyRoles: Object
invite: "booksRbUoSM"
用户是
_id:1639129314021
firstName:"*** ***"
lastName:"****"
companyName:"SITS"
passwordReset:""
activated:true
accountId:1639129314021 // link attribute
siteId:-1
role:0
last:1639137913873
blocked:false
blockedtext:""
trialend:1640338913781
paytype:1
hashAccess:Array
emergencyEnabled:false
visitorTypes:Array
sitesLimit:2
manualCreation:false
username:"*************"
password:"**********************************"
email:"*********************"
passwordNotification:true
passwordLifecycle:1646906375986
isNewUser:true
listFeature:Object
我想从用户模型中搜索该 accountId 是否存在任何员工,如果有员工与 accountId 关联,则添加具有可用公共数据的新员工。否则不会。我怎样才能在环回中做到这一点。我被困在这里了!
尝试以下
var employee_data = Employee .filter(x => User.map(y => y.accountId).includes(x.accountId));
我想你正在使用猫鼬并且你的 User
模型中有这部分:
accountId: {
type: mongoose.Schema.ObjectId,
ref: 'Employee',
required: [true, 'this field must be provided']
},
您可以将 populate
方法添加到您的架构中,以便在您每次使用 User.find(), findOne,
和所有其他以 'find'[= 开头的方法请求数据时添加相关模型的数据18=]
userSchema.pre(/^find/, function(next) {
this.populate({
path: 'accountId',
options: { // you can populate only some fields if you want
select: 'name company jobTitle'
}
})
next()
})
然后,您可以像往常一样使用您的 User
模型,但现在添加了相关的 Employee
数据:
const given_id = "65465458qw7d7q1q7w1x"
const user = await User.findOne({accountId: given_id})
// Note: you can use User.find if there can be
// more than one user with that accountId.
环回 4
解决方案 1:
在您有权访问 UserRepository 的用户控制器中
假设您知道 accountId 并且仅当您有员工记录时accountId 才存在,您可以有一个方法
@get('/users/{accountId})
async findUserWhoIsAnEmployee(@param.path.string('accountId') accountId: string){
return this.userRepository.findOne({where: {accountId}})
}
假设您不知道 accountId...
您可以访问 UserController 中的员工存储库,方法是将其作为构造函数中的参数传递并查找用户,然后签入员工记录。 (不是最优的,因为将在您的数据库上进行两次查询)
export class UserController{
constructor(
@repository(UserRepository) public userRepository: UserRepository,
@repository(EmployeeRepository) private employeeRepository: EmployeeRepository
)
// returns employee record or null if none
@get('/users/{id}/employee-record)
async findUserWhoIsAnEmployee(@param.path.string('id') id: string){
const user = await this.userRepository.findById(id);
return (!user) ? null : this.employeeRepository.findOne({where: {accountId: user.accountId}})
}
}
解决方案 2:
用户和员工模型之间存在关系(hasOne,最好是)
您可以在该用户上找到该员工记录
// returns employee record of a user if exists
@get('/users/{id})
async findUserWhoIsAnEmployee(@param.path.string('id') id: string){
return this.userRepository.findById(id).employeeRecord()
}
//Where employeeRecord is a reference property on the user Model.
我正在使用环回版本 2.x.x。原来很简单
currentModel.app.models.modelYouWantToAccess