Tengo dos modelos separados, nombre de empleado y usuario con algunos datos comunes y un ID de cuenta para vincularse entre sí. Un registro para cada modelo es el siguiente:
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"y para el usuario es
_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:ObjectQuiero buscar desde el modelo de usuario si existe algún empleado con ese identificador de cuenta o no, si hay un empleado asociado con el identificador de cuenta, luego agregar un nuevo empleado con los datos comunes disponibles. de otra forma no. ¿Cómo puedo hacer esto en bucle invertido? ¡Estoy atrapado aquí!
Estoy usando loopback versión 2.xx Resulta ser muy simple
currentModel.app.models.modelYouWantToAccessPrueba con abajo
var employee_data = Employee .filter(x => User.map(y => y.accountId).includes(x.accountId));Supongo que está usando mangosta y tiene esta parte en su modelo de User :
accountId: { type: mongoose.Schema.ObjectId, ref: 'Employee', required: [true, 'this field must be provided'] }, Puede agregar un método de llenado a su esquema para que los datos del modelo relacionado se agreguen cada vez que solicite datos con populate User.find(), findOne, y todos los demás métodos que comienzan con 'buscar'
userSchema.pre(/^find/, function(next) { this.populate({ path: 'accountId', options: { // you can populate only some fields if you want select: 'name company jobTitle' } }) next() }) Luego, puede usar su modelo de User como siempre, pero ahora se agregan los datos de Employee relacionados:
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.