如何选择带有id的子文档?

时间:2018-04-02 00:51:12

标签: node.js express mongoose

我正在尝试通过其id获取子文档(嵌套在数组中),但我仍然可以获得整个文档。

router.get("/book/:libraryid/:bookid", (req, res) => {
  Library.findOne({ _id: req.params.libraryid, "book._id": req.params.bookid})
    .then(result => {
      console.log(result); //shows all subdocument
    });
});

如何选择带有id的子文档?

架构:

   {
    "_id": {
        "$oid": "12345"
    },
    "libaryName": "A random libary",
    "Books": [       
        {
            "_id": {
                "$oid": "1"
            }
            "bookTitle": "Example",
            "TotalPages": "500"                 
        },
        {
            "_id": {
                "$oid": "2"
            }
            "bookTitle": "Delete Me",
            "TotalPages": "400"                 
        }
    ]
}

1 个答案:

答案 0 :(得分:1)

使用以下内容,它应该返回仅包含基于bookId的过滤书籍的文档。

router.get("/book/:libraryid/:bookid", (req, res) => {
  Library.findOne({ _id: req.params.libraryid}, {"books": {"$elemMatch": {_id: req.params.bookid}}})
    .then(result => {
      console.log(result); //shows all subdocument
    });
});