如何从使用Mongodb的ObjectId数组中聚合一个到多个?

时间:2018-03-12 14:49:37

标签: node.js mongodb mongodb-query aggregation-framework

我在nodejs上使用本机mongodb驱动程序,我希望能够运行单个查询并从另一个集合中检索所有文档。

我有一个tags集合:id_tag,在我的文章集上,我有tags这是一个ObjectId数组

Array of ObjectId

现在,当我检索到正确的文档时,我希望tagstag集合上保留tags值。

我无法绕过那个,我一直都是 尝试这个但它只检索第一个标签:

  db.orders.aggregate([
     {
        $unwind: "$tags"
     },
     {
        $lookup:
           {
              from: "tags",
              localField: "tags",
              foreignField: "_id",
              as: "tags_found"
          }
     },
     {
        $match: { "tags_found": { $ne: [] } }
     }
  ])

有没有办法一次检索所有标签?如果没有,那么在不使用Mongoose而是使用本机驱动程序的情况下,最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

通过查看另一个问题,我几乎设法获得了我想要的东西,谢谢@chridam

不幸的是,它找不到没有标签的文章。有没有办法做到这一点?

db.getCollection('articles').aggregate([
     {
        $unwind: "$tags"
     },
     {
        $lookup:
           {
              from: "tags",
              localField: "tags",
              foreignField: "_id",
              as: "tags_found"
          }
     },
      {
        $unwind: "$tags_found"
     },
     { "$group": {
        "_id": "$_id",
        "tags": { "$push": "$tags" },
        "tags_found": { "$push": "$tags_found" }
    }},
     {
        $match: { "tags_found": { $ne: [] } }
     }
  ])