0

我有一个线程集合,每个线程都有一个嵌套的评论文档数组。我只想返回一个基于其 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();
                });
4

1 回答 1

1

不幸的是,MongoDB(以及因此 Mongoose)目前不直接支持该操作。MongoDB 不能只返回数组的一个元素,所以 Mongoose 也不支持。(如果你碰巧有数组项的索引,你可以使用slice文档))。

此外,该select函数仅采用您想要包含/排除的字段列表(文档)。该select函数映射到 MongoDB 的投影功能。它不能使用 MongoDB 运算符。

你可以做select('comments') for example to only include the comments field from the document. But, this would return the entire array of评论`。您需要进行客户端过滤以提取您正在寻找的特定评论。

有一个开放的请求来添加功能,以便能够从此处的数组中额外添加特定元素。

有些人可能会建议您尝试聚合框架(此处)。

于 2013-08-23T12:14:32.270 回答