sql >> データベース >  >> NoSQL >> MongoDB

マングースルートでの約束の使用

    わかりました。まず、mongooseを使用していますか 右?

    User findOne(query)などのメソッドに応答するマングースモデルです 、findOneAndUpdate(query, update, opts) など。

    これらのメソッドのいずれかを呼び出した後、メソッドexec()を呼び出します。 クエリを返します。

    クエリは正確にはPromiseではないため、Mongoが使用するPromiseを指定する必要があります。ここではネイティブのものを使用することをお勧めしますので、プロジェクトに次の行を追加してください:

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

    さて、この指示はあなたに約束を返します、いいですね!

    User.findOne(q).exec()
    

    これで、ロジックを使用してPromiseチェーンを作成できます。例:

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

    ヒント:コードをさらにクリーンにするために、auxメソッドを作成することをお勧めします:

    /** @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. meteorを使用したファイルのアップロードとダウンロード

    2. マングースで異なる値を持つ複数の要素を更新します

    3. 異なる値でmongoDbコレクションのすべてのドキュメントの同じプロパティを更新します

    4. Node.jsを使用してMongoDBに接続するための最良の方法