如何从集合中与列表字段元素的值匹配的其他集合中获取文档

金在英

我有两个收藏,一个是项目收藏,另一个是批量收藏

两个集合看起来像这样

集合“项目”:

{
    "_id" : ObjectId("6102780c27474af56cf6734b"),
    "channel" : "instagram",
    "status" : "new",
    "analysis_type" : "detail",
    "batch_ids" : [ 
        "6102780c27474af56cf6734d", 
        "6102780d27474af56cf6734f", 
        "6102780d27474af56cf67351", 
        "6102780e27474af56cf67353", 
        "6102780e27474af56cf67355", 
        "6102780e27474af56cf67357"
    ]
}

集合“批次”:

    "_id" : ObjectId("6102780c27474af56cf6734d"),
    "keyword" : {
        "keyword" : "tomato",
        "keyword_type" : "hashtag"
    },
    "channel" : "instagram",
    "post_datetime" : ISODate("2021-07-29T18:42:36.306Z"),
    "analysis_type" : "detail",
    "status" : "new",
}

一个项目包含多个批次。因此,在名为 batch_ids 的字段中,我写下了项目包含的批次。batch_ids 字段的每个元素都是批处理集合的 _id 字段的值。我想立即查看属于一个项目的批次的状态。如何创建视图?我想看到的结果是:

{
    "_id" : ObjectId("6102780c27474af56cf6734b"),
    "channel" : "instagram",
    "status" : "new",
    "analysis_type" : "detail",
    "batch_ids" : [ 
        {
         "_id":ObjectId("6102780c27474af56cf6734d"),
         "status":"new"
        },
        {
         "_id":ObjectId("6102780d27474af56cf6734f"),
         "status":"new"
        },
        {
         "_id":ObjectId("6102780d27474af56cf67351"),
         "status":"new"
        },
        {
         "_id":ObjectId("6102780e27474af56cf67353"),
         "status":"new"
        },
        {
         "_id":ObjectId("6102780e27474af56cf67355"),
         "status":"new"
        },
        {
         "_id":ObjectId("6102780e27474af56cf67357"),
         "status":"new"
        },
    ]
}
汤姆·斯拉巴特

一个简单的$lookup就足够了:

db.project.aggregate([
  {
    "$lookup": {
      "from": "batch",
      "let": {
        batchObjectIds: {
          $map: {
            input: "$batch_ids",
            as: "batch_id",
            in: {
              "$toObjectId": "$$batch_id"
            }
          }
        }
      },
      "pipeline": [
        {
          $match: {
            $expr: {
              $in: [
                "$_id",
                "$$batchObjectIds"
              ]
            }
          }
        },
        {
          $project: {
            _id: 1,
            status: 1
          }
        }
      ],
      "as": "batch_ids"
    }
  }
])

*请注意,因为您保存的是batch_idsasstring而不是objectId我们必须将它们强制转换ObjectId使用toObjectId,这意味着这仅适用于 Mongo v4.0+。如果您使用的是较小的 Mongo 版本,则必须将其拆分为 2 个调用。

蒙戈游乐场

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何检查集合中是否包含Scala中其他集合的任何元素?

从集合中获取元素

如何在迭代集合时安全地从集合中删除其他元素

从集合中获取元素

如何串联F#中的列表(和其他集合)?

如何获取集合Cloud Firestore中的文档ID列表?

如何表达集合中的其他内容?

如何基于该文档中的特定字段从集合中获取文档

mongoDB根据条件从其他集合的链接文档中查找带有值的文档

如何从其他集合中删除包含值的模式的python集合中的字段

MongoDB如果其他集合中存在字段/引用,则从汇总中排除文档

如何在集合中获取文档ID的列表而不在Firestore中获取文档的内容?

根据其他集合中的值从mongo集合中获取

MongoDB Compass-文档未显示其他集合中引用了对象ID(Ref)的字段

仅获取具有与单独集合中的文档匹配的ID的FireBase集合中的文档

灰烬数据:如何在其他集合上获取集合中模型的汇总列表(@每个都不起作用)

如何从其他集合和查询中填充引用的文档?

如何获取集合中的最新文档并删除其他文档

流星:如何自动使用存储在集合中其他字段中的数组长度填充字段?

如何从Sails JS Waterline集合中获取指定字段的列表?

如何根据其他元素从集合中检索元素?

如何获取firestore集合中的文档数

如何查询数组中的每个元素是否与集合字段匹配

如何获取 mongodb 集合中字段的最常用值的排序列表

如果存在相同的字段,如何更新数组中的元素,将其他更新保留在集合中?

在MongoDB中查找其他集合中不存在字段值的文档

如何获取集合>文档>集合>文档中的firestore数据库中的字段?

如何从集合中的文档访问字段

如何遍历集合以获取 MongoDB 中的字段值