MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongo-Suchwert mit unbekanntem übergeordneten Schlüssel

Ich bin mir nicht sicher, ob Sie dies mit Ihrem aktuellen Schema elegant lösen können. slotTypes sollte ein Array von Unterdokumenten sein, was Ihr $elemMatch zulassen würde Abfrage zu arbeiten. Im Moment ist es ein Objekt mit numerischen Tasten.

Das heißt, Ihr Dokumentschema sollte in etwa so aussehen:

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

Wenn das Ändern des Datenlayouts keine Option ist, müssen Sie im Grunde jedes Dokument durchsuchen, um Übereinstimmungen mit $where zu finden . Dies ist langsam, nicht indexierbar und umständlich.

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

Sie sollten die Dokumentation zu $where lesen um sicherzustellen, dass Sie die Vorbehalte verstehen, und aus Liebe zu allem, was heilig ist, säubern Sie Ihre Eingaben für die Funktion; Dies ist Live-Code, der im Kontext Ihrer Datenbank ausgeführt wird.