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

Sådan krydser du indlejret dokument rekursivt i MongoDB

Den nemmeste måde at gøre dette på er at bruge bluebird løfter, specifikt each , props , reduce og map metoder, afhængigt af din use case.

I dit tilfælde vil jeg foreslå noget i retning af

var bluebird = require('bluebird');
var mongoose = require('mongoose');
var UserModel = mongoose.model('User');

function getUser(userId) {
  return UserModel.findOne({_id: userId}).lean().exec()
    .then(function(user){
      return bluebird.props({
        firstName: user.firstName,
        parents: bluebird.map(user.parents, getUser),
        children: bluebird.map(user.children, getUser),
        partner: bluebird.map(user.partner, getUser),
        sibling: bluebird.map(user.sibling, getUser)
      })
    });
}

// Then call getUser once on the root node, e.g.
getUser(rootUserObjectId)
  .then(function(userTree){
    console.log(userTree)
  })

Fortæl mig, hvordan det går!




  1. Det ser ud til, at når jeg laver fs.writeFile(), genstarter den ændrede fil nodemon. Hvordan får man det til ikke at genstarte?

  2. Kan ikke oprette indeks i mongodb, nøglen er for stor til at indeksere

  3. MongoEngine:Tilføjelse af felter til dynamisk dokument

  4. Hvorfor vil min mongodb ikke oprette forbindelse til port 28017?