2017-04-02 126 views
1
搜索Node.js的applictaion嵌套JSON

我的JSON文件如下,我的路由器 router.get( '/書/:BOOKID',ctrlbooks.booksReadOne); 返回以下JSON這是預期,但如果我想帶指定id的發言權只返回標題爲這種API router.get(「/書/:BOOKID /標題/:titleid」,ctrlbooks.titlesReadOne) ; 它不會工作我錯過了什麼?通過ID

[ 
    { 
    "_id": "58dd21c3cb77090b930b6063", 
    "bookAuthor": "George Orwell", 
    "titles": [ 
     { 
     "title": "Animal Farm", 
     "_id": "58dd3f2701cc081056135dae", 
     "reviews": [ 
      { 
      "author": "Lisa", 
      "rating": 4, 
      "reviewText": "this is a review", 
      "_id": "58dd8e13876c0f16b17cd7dc", 
      "createdOn": "2017-03-30T23:00:35.662Z" 
      } 
     ], 
     "favouredBy": [ 
      "bb, aa, cc" 
     ] 
     }, 
     { 
     "title": "1984", 
     "_id": "58dd42a59f12f110d1756f08", 
     "reviews": [ 
      { 
      "author": "jessy", 
      "rating": 5, 
      "reviewText": "REVIEW FOR SECOND TITLE", 
      "_id": "58dd8ef46d4aaa16e4545c76", 
      "createdOn": "2017-03-30T23:04:20.609Z" 
      } 
     ], 
     "favouredBy": [ 
      "all" 
     ] 
     } 
    ] 
    } 
] 

我控制器,路由器 router.get( '/書/:BOOKID',ctrlbooks.booksReadOne); 是

module.exports.booksReadOne = function(req, res) { 
     console.log('Finding book details', req.params); 
     if (req.params && req.params.bookid) { 
      Bok 
       .findById(req.params.bookid) 
       .exec(function(err, book) { 
        if (!book) { 
         sendJSONresponse(res, 404, { 
          "message": "bookid not found" 
         }); 
         return; 
        } else if (err) { 
         console.log(err); 
         sendJSONresponse(res, 404, err); 
         return; 
        } 
        console.log(book); 
        sendJSONresponse(res, 200, book); 
       }); 
     } else { 
      console.log('No bookid specified'); 
      sendJSONresponse(res, 404, { 
       "message": "No bookid in request" 
      }); 
     } 
    }; 

,這就是我試圖用提供的給定標題ID只返回標題,但是當我使用郵遞員

module.exports.tilesReadOne = function(req, res) { 
     console.log('Finding book details', req.params); 
     if (req.params && req.params.titleid) { 
      Bok 
       .findById(req.params.titleid) 
       .exec(function(err, book) { 
        if (!book) { 
         sendJSONresponse(res, 404, { 
          "message": "title not found" 
         }); 
         return; 
        } else if (err) { 
         console.log(err); 
         sendJSONresponse(res, 404, err); 
         return; 
        } 
        console.log(book); 
        sendJSONresponse(res, 200, book); 
       }); 
     } else { 
      console.log('No title specified'); 
      sendJSONresponse(res, 404, { 
       "message": "No title in request" 
      }); 
     } 
    }; 
+0

的可能的複製[只檢索MongoDB中集合的對象陣列中的查詢元件](http://stackoverflow.com/questions/3985214/retrieve-onl Y型的,查詢元素功能於一個對象陣列功能於MongoDB中收集) – Veeram

回答

0

或者聚集測試它這個是不行的,你可以篩選應用級別標題:

Bok 
     .findById(req.params.bookid) 
     .exec(function(err, book) { 
      if (book) { 
       var matchingTitles = book.titles.filter(function(title){ 
        return title._id == req.params.bookid 
       }) 
       // return titles, if any 
      } 
     }) 
+0

從上面的JSON什麼,我希望能得到這樣的(只有一個標題形式給定的ID) { 「稱號「: 」動物農場「, 」_id「: 」58dd3f2701cc081056135dae「, 」評論「: { 」作者「: 」巴里「, 」評級「:3, 」reviewText「:」 這是一則評論」, 「_id」: 「58dd8e13876c0f16b17cd7dc」, 「createdOn」: 「2017-03-30T23:00:35.662Z」 } ], 「favouredBy」:[ 「BB,AA,CC」 ] } – ipkiss

+0

'book.titles'是一個數組。它可能包含超過1個標題和所需的ID。如果您很高興返回第一個匹配,則返回過濾數組的第一個元素,或者使用'for'循環迭代標題以在第一次匹配時退出迭代以優化一點。 –