首页 > 解决方案 > 操作数据并加入 mongodb

问题描述

我对 Mongodb 比较陌生,我需要执行以下操作:

我有 2 个表,“记录”和“文件”。

“记录”表中的一行如下所示: { "_id" : ObjectId("6012d31aea8fb06d8bf438a0"), "img" : false, "type" : "DRAFT", "submitted" : true }

“文件”表中的一行如下所示: { "_id" : ObjectId("5fabf23f917863623ec54a86"), "filename" : "6012d31aea8fb06d8bf438a0", "uploadDate" : ISODate("2020-11-11T14:16:31.462Z"), "length" : NumberLong(4119) }

“files”表中的“filename”字段对应于“records”表中的_id字段。

如何在“记录”表中找到文件名不是 id 的所有“文件”?

谢谢!

编辑:*我使用的是 Mongo 3.6 版*

标签: mongodbjoinmongodb-querysubquery

解决方案


  1. 转换filenameObjectId.
  2. 使用and执行$lookup(或加入)操作。filename_id
  3. 保留为空records(这意味着records集合没有该文件的条目)。

试试这个查询:

db.files.aggregate([
    {
        $lookup: {
            from: "records",
            let: { file_id: { $toObjectId: "$filename" } },
            pipeline: [
                {
                    $match: {
                        $expr: { $eq: ["$_id", "$$file_id"] }
                    }
                }
            ],
            as: "records"
        }
    },
    {
        $match: {
            $expr: {
                $eq: [{ $size: "$records" }, 0]
            }
        }
    }
])

推荐阅读