【发布时间】:2014-05-14 10:00:03
【问题描述】:
我正在尝试从节点上的 MongoDB 获取文档。假设文档具有以下结构:
{ "_id": ObjectId, "title" : String, "tags" : Array<String> }
我想按相关性对它们进行排序 - 因此,当我在寻找具有“蓝色”或“黄色”标签的文档时,我想先获取具有这两个标签的文档。到目前为止,我由谷歌管理,反复试验:
var tags = [ "yellow", "blue" ];
db.collection('files').aggregate([
{ $project : { tags: 1 } },
{ $unwind : "$tags" },
{ $match : { "tags": { "$in": tags } } },
{ $group : { _id: "$_id", relevance: { $sum:1 } } },
{ $sort : { relevance : -1 } },
], function(err, success) {
console.log(success);
});
它工作得很好,我得到了排序的 id 集合:
[{"_id":"5371355045002fc820a09566","relevance":2},{"_id":"53712fc6c8fcd124216de6cd","relevance":2},{"_id":"5371302ebd4725dc1b908316","relevance":1}]
现在我会进行另一次查询并询问具有这些 ID 的文档 - 但这是我的问题:可以在一个查询中完成吗?
【问题讨论】:
-
您将
$$ROOT投射到将为您提供原始文档的管道中
标签: node.js mongodb aggregation-framework mongojs