mongodb - 导出集合并用另一个集合中的字段替换字段(聚合?)

标签 mongodb meteor mongodb-query aggregation-framework database

使用 MongoChef GUI,但在命令行中没问题。

我有一个结构如下的集合:

投票数

{ 
    "_id" : "5qgfddRubJ32pS48B", 
    "createdBy" : "HdKRfwzGriMMZgSQu", 
    "fellowId" : "yCaqt5nT3LQCBLj8j", 
}

我需要先使用 createdBy 字段在用户集合中查找用户,看看他们是否经过验证

用户

{ 
    "_id": "HdKRfwzGriMMZgSQu",
    "emails" : [
        {
            "address" : "someuser@example.com", 
            "verified" : true
        }
    ]
}

此外,从 fellowId

的第三个集合中获取更多信息

研究员

{ 
    "_id" : "yCaqt5nT3LQCBLj8j", 
    "title" : "Fellow Title"
}

并将它们全部导出为一个 csv 或 json 文件。我怎样才能将此作为 mongo 查询/导出来实现?

例如,所需的输出是:

{ 
    "_id" : "yCaqt5nT3LQCBLj8j", 
    "fellowTitle": "Fellow Title"
    "isVerified" : true
}

最佳答案

您可以使用 2 个 $lookup 执行聚合以加入两个集合:

  • 1 $lookup 加入用户
  • 1 $unwind 删除用户数组
  • 1 $unwind 删除用户电子邮件数组(因为我们必须检查verify)
  • 1 $sort 使用 user.emails.verified 排序
  • 1 $group 实际只选择第一个条目(已验证或未验证)
  • 1 $lookup 加入fellows
  • 1 $unwind 删除 fellows 数组
  • 1 $project 最后格式化你想要的任何格式
  • 1 $out 导出到新集合

查询是:

db.votes.aggregate([{
    $lookup: {
        from: "users",
        localField: "createdBy",
        foreignField: "_id",
        as: "user"
    }
}, {
    $unwind: "$user"
}, {
    $unwind: "$user.emails"
}, {
    $sort: { "user.emails.verified": -1 }
}, {
    $group: {
        _id: "$_id",
        createdBy: { $first: "$createdBy" },
        fellowId: { $first: "$fellowId" },
        user: { $first: "$user" }
    }
}, {
    $lookup: {
        from: "fellows",
        localField: "fellowId",
        foreignField: "_id",
        as: "fellow"
    }
}, {
    $unwind: "$fellow"
}, {
    $project: {
        "_id": 1,
        "fellowTitle": "$fellow._id",
        "isVerified": "$user.emails.verified"
    }
}, {
    $out: "results"
}])

然后导出:

mongoexport - d testDB - c results > results.json

关于mongodb - 导出集合并用另一个集合中的字段替换字段(聚合?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40350336/

相关文章:

node.js - 当用户离开 Meteor 和/或 Iron 路由器中的页面时如何捕捉?

node.js - Mongoose 中的 friend 模式建模?

java - 使用 Java 在 MongoDB 3.4 中创建带有验证的集合

javascript - 字符串操作和聚合

java - DAO 和依赖注入(inject),建议?

mongodb - 使用 MongoDB C# 驱动程序查询生成器获取项目计数

javascript - 安装 iron :router in meteor app 后 Materialise 侧边栏导航停止工作

node.js - 使用 Express 和 MongoDB 从多个单独的集合中获取数据

javascript - meteor 电子邮件 ETIMEOUT 错误

mongodb - 选择mongoDB聚合中group后的所有字段