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

Brug af løfter i Mongoose-ruter

Ok, først bruger du mongoose ret?

User er din mongoose model, som reagerer på metoder såsom findOne(query) , findOneAndUpdate(query, update, opts) osv..

Efter at have kaldt en af ​​disse metoder, kald metoden exec() som returnerer en forespørgsel.

En forespørgsel er ikke ligefrem et løfte, og du skal angive, hvilke løfter Mongo vil bruge. Her vil jeg anbefale at bruge de oprindelige, så tilføj denne linje ved dit projekt:

 const mongoose = require('mongoose')
 mongoose.Promise = Promise

Nu giver denne instruktion dig et løfte, dejligt!

User.findOne(q).exec()

Du kan nu oprette en Promise-kæde med din logik, for eksempel:

 return User
     .findOne(_id)
     .exec()
     .then((user) => {
       return Receipt
         .findOne({ bookName: user.bookName })
         .exec()
       })
     .then((receipt) => {
            // example
            return res.status(200).json(receipt)
         }))
     })

Tip:Jeg vil foreslå at oprette aux-metoder for at gøre koden endnu mere renere:

/** @return {Promise} */
function findUser(id) {
  return User.findOne(id).exec()
}

/** @return {Promise} */
function findReceipt(bookName) {
  return Receipt.findOne({ bookName }).exec()
}

// example
function f(req, res) {
  const userId = req.get('id')

  return findUser(userId)
    .then((user) => findReceipt(user.bookName))
    .then((receipt) => res.status(200).json(receipt))
    .catch((err) => res.status(500).json(null))
}

// register your handler
app.get('/book', f)



  1. k8s/python:Hvordan læser jeg en hemmelighed ved hjælp af Kubernetes Python-klienten?

  2. Få størrelsen på alle dokumenterne i en forespørgsel

  3. Mongos Installation/Opsætning i Elastic Beanstalk

  4. MongoDB shell script ved hjælp af projektion til at formatere dato og få lokal tid