MongoDB查询:如何从数组中返回单个指定对象?
从MongoDB嵌套数组中返回单个匹配对象的实现方案
我最近碰到个需求:要通过请求参数req.params.book,从用户文档的posts数组里筛选出对应标题的单个对象并返回。试了几种方法后,终于找到了可行的实现:
路由与查询代码
router.route("/book-review/:book") .get((req, res) => { return model.findById(req.user.id).select({ 'posts': { $elemMatch: { "title": req.params.book } } }) })
返回结果
{ _id: 5ae1be4c48c5360c5457da48, posts: [ { i: 5ae21180bb811e1a453317f0, title: 'cc', chapters: [] } ] }
这个结果完全符合预期——成功从posts数组里返回了唯一匹配标题的对象。核心逻辑是先用findById定位到当前用户的文档,再通过select方法结合MongoDB的$elemMatch操作符,精准筛选出posts数组中title与请求参数匹配的元素,$elemMatch会确保只返回数组中第一个符合条件的对象,刚好满足返回单个对象的需求。
内容的提问来源于stack exchange,提问作者sean carroll
相关产品推荐
相关产品推荐

