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

mongodb-Aggregat $lookup vs. find and populate

Nun, es gibt keine Möglichkeit, $lookup wäre schneller, als die Liste der Kommentar-IDs auf dem eigentlichen Videoobjekt zu haben. Ich meine, Sie müssen eine whole other request stellen zu mongo, um sie jetzt zu bekommen. In Bezug auf die Leistung würde die Suche also offensichtlich Zeit hinzufügen. Das setzt voraus, dass Sie mongoose populate nicht verwenden um diese Kommentar-IDs in die referenzierten Objekte zu "konvertieren".

Wenn Sie dann die Kommentare aus dem Video entfernen (sowie die tatsächliche Zählstütze) und die Suche durchführen, ist dies der richtige Weg. Da Sie sofort in Ihrem Argument übereinstimmen und dann eine einfache lookup durchführen Ich sehe nicht, wie dies ein Engpass für Sie sein könnte. Außerdem können Sie Ihre Aggregation optimieren/ändern/abstimmen, siehe explain usw.

Ihr Videoschema wäre auf diese Weise ziemlich sauber:

const VideoSchema = new mongoose.Schema({
  caption: {
    type: String,
    trim: true,
    maxlength: 512,
    required: true,
  },
  owner: {
    type: mongoose.Schema.ObjectId,
    ref: 'User',
    required: true,
  },
  // some more fields
}, { timestamps: true });