MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Mongo trova valore con chiave genitore sconosciuta

Non sono sicuro che sarai in grado di risolverlo elegantemente con il tuo schema attuale; slotTypes dovrebbe essere una matrice di documenti secondari, che consentirebbero il tuo $elemMatch interrogare per funzionare. In questo momento, è un oggetto con tasti numerici.

Cioè, lo schema del tuo documento dovrebbe essere qualcosa del tipo:

{
   "assetsId": {
     "0": "546cf2f8585ffa451bb68369"
  },
   "slotTypes": [
     { "usage": "json" },
     { "usage": "image" }
  ]
}

Se la modifica del layout dei dati non è un'opzione, dovrai praticamente scansionare tutti i documenti per trovare corrispondenze con $where . Questo è lento, non indicizzabile e imbarazzante.

db.objects.find({$where: function() {
  for(var key in this.slotTypes) {
    if (this.slotTypes[key].usage == "json") return true;
  }
  return false;
}})

Dovresti leggere la documentazione su $where per assicurarti di comprenderne le avvertenze e, per l'amore di tutto ciò che è santo, sanifica i tuoi input per la funzione; questo è codice attivo in esecuzione nel contesto del tuo database.