Mongodb Mongoose 3.6:按id返回一个子文档

Mongodb Mongoose 3.6:按id返回一个子文档,mongodb,mongoose,Mongodb,Mongoose,我有一个线程集合,每个线程都有一个嵌套的注释文档数组。 我只想返回一个基于id的注释文档。 我有线程id和注释id。 唉,我似乎无法做到这一点——四处搜索,我得出了以下结论,但我得到了一个错误 {[MongoError:不支持的投影选项:$elemMatch]名称:'MongoError'} 这似乎是一个非常典型的用例,有人能指出我哪里出了问题吗 var thread_id = vo.thread_id; var _id = vo._id; thre

我有一个线程集合,每个线程都有一个嵌套的注释文档数组。 我只想返回一个基于id的注释文档。 我有线程id和注释id。 唉,我似乎无法做到这一点——四处搜索,我得出了以下结论,但我得到了一个错误

{[MongoError:不支持的投影选项:$elemMatch]名称:'MongoError'}

这似乎是一个非常典型的用例,有人能指出我哪里出了问题吗

       var thread_id =  vo.thread_id;
       var _id =  vo._id;
       threads.model.find({_id:thread_id}).select({ comments: { $elemMatch: {_id:_id}}}).exec(function (err, thread) {
                    console.log("***************************************");
                    console.log(err);
                    console.log(thread);
                    done();
                });
不幸的是,MongoDB(以及Mongoose)目前并不直接支持该操作。MongoDB不能只返回数组的一个元素,所以Mongoose也不支持。(如果碰巧有数组项的索引,可以使用
slice
())

此外,
select
函数只获取要包括/排除的字段列表()。
select
功能映射到MongoDB的功能。它不能使用MongoDB操作符

例如,您可以执行
select('comments')操作,只包括文档中的comments字段。但是,这将返回整个
comments`数组。您需要进行客户端过滤,以提取您要查找的特定评论

有一个公开请求,要求添加功能,以便能够从数组中额外添加一个特定元素


有些人可能建议您尝试使用聚合框架()。

进一步研究,我运行的mongo db的安装版本似乎是1.6.2,$elemMatch是在2.2版中引入的。可能是重复的谢谢,我来看看。 看起来这是可能的,但是我的mongodb版本太旧了。