2017-10-17 1 views
0

Dans ma base de données, j'ai différentes collections qui peuvent être attachées avec leurs ID's afin que je puisse afficher quelques event(s). Mais il y a une collection que je ne peux pas sembler faire correspondre avec les autres collections.Faire correspondre les collections avec leurs ID de la base de données

Une collection est appelée événements et chaque événement contient un attribut de unit:

enter image description here

Et j'ai aussi une collection avec locks (unités) qui contient le même ObjectId:

enter image description here Donc, mon objectif ici est de pouvoir faire correspondre un lock (unité) avec le (s) événement (s) correct (s). Dans mon application React and Redux, j'ai un itinéraire où je veux afficher le (s) bon (s) événement (s) correct (s) lock (unité). J'ai dans mon routeur ceci:

<AuthRoute path="/log/:lockId" component={LockDetails} /> 

Et puis dans mon parent qui est censé afficher la liste que j'ai ceci:

class LockDetails extends Component { 
    render() { 
    const lockId = this.props.match.params.lockId // Getting the ID from endpoint 
    const locks = this.props.locks || [] // All locks(units) from Redux store 
    const lock = locks.find(lock => { // Getting the correct lock form my params 
     return lock._id === lockId 
    }) 

Et puis en passant vers le bas:

<LockLog lock={lock}/> 

Mais voici où cela devient difficile. Je me demande comment je devrais écrire le code pour obtenir le (s) bon (s) événement (s) correct (s) lock (unité).

Lors de l'obtention du lock du parent j'utilise également keyBy de la bibliothèque lodash.

const keyedLocks = keyBy(lock, '_id') 

const mappedEvents = 
    events.reverse().map((event, i) => { 
    var driver = event.driver ? keyedDrivers[event.driver] : false 
    var carrier = driver ? keyedCarriers[driver.carrier] : false 
    var customer = event.customer ? keyedCustomers[event.customer] : false 
    var lock = event.unit ? keyedLocks[event.unit] : false // Tried something here, but it didn't go so well.... 

    return (
     <div> 
     <EventItem 
      key={i} 
      event={event} 
      customer={customer} 
      carrier={carrier} 
      driver={driver} 
      lock={keyedLocks[event.unit] || { address: {} }} 
     /> 
     </div> 
    ) 
    }) 

Cela va bien avec les données correspondant de mes autres paramètres à mon lock (unité), mais pas avec l'événement (s). Je voudrais donc un peu d'aide, car la seule chose qui se présente est émis:

enter image description here

donc pas lock (unité) après « öppnade på ».

Répondre

1

Vous devez placer un verrou dans un tableau ou un objet comme: const keyedLocks = keyBy([lock], '_id')