问题描述
是否可以导出将所有DBRef对象嵌入单个JSON的集合?
我试图从罗盘导出集合,但是它不能将dbrefs解析为嵌入式json。
数据结构示例:
过程:
{
"_id": {
"$oid": "5f44e89aa1f4c77447629a29"
},"name": "test process","description": "A test configuration for a process","milestones": [{
"$ref": "milestone","$id": {
"$oid": "5f5753636b75033a49b7cc7b"
}
},{
"$ref": "milestone","$id": {
"$oid": "5f5753636b75033a49b7cc82"
}
}]
}
里程碑:
[{
"_id": {
"$oid": "5f5753636b75033a49b7cc7b"
},"name": "S1","order": 0,"results": [
{
"$ref": "resultDeFinition","$id": {
"$oid": "5f5753636b75033a49b7cc79"
}
},{
"$ref": "resultDeFinition","$id": {
"$oid": "5f5753636b75033a49b7cc7a"
}
}
]
},{
"_id": {
"$oid": "5f5753636b75033a49b7cc82"
},"name": "S2","order": 1,"$id": {
"$oid": "5f5753636b75033a49b7cc7d"
}
},"$id": {
"$oid": "5f5753636b75033a49b7cc7e"
}
},"$id": {
"$oid": "5f5753636b75033a49b7cc7f"
}
},"$id": {
"$oid": "5f5753636b75033a49b7cc80"
}
},"$id": {
"$oid": "5f5753636b75033a49b7cc81"
}
}
]
}]
阶段:
{
"_id": {
"$oid": "5f5753636b75033a49b7cc7c"
},"name": "P1","activityStream": {
"$ref": "activityStream","$id": {
"$oid": "5f5755076b75033a49b7cc83"
}
}
}
结果定义:
[{
"_id": {
"$oid": "5f5753636b75033a49b7cc79"
},"name": "userresult","resultType": "User"
},{
"_id": {
"$oid": "5f5753636b75033a49b7cc7a"
},"name": "planDateResult","resultType": "PlanDate"
},{
"_id": {
"$oid": "5f5753636b75033a49b7cc7d"
},"name": "fileResult","resultType": "File"
},{
"_id": {
"$oid": "5f5753636b75033a49b7cc7e"
},"name": "dateResult","resultType": "Date"
},{
"_id": {
"$oid": "5f5753636b75033a49b7cc7f"
},"name": "textresult","resultType": "Text"
},{
"_id": {
"$oid": "5f5753636b75033a49b7cc80"
},"name": "booleanResult","resultType": "Boolean"
},{
"_id": {
"$oid": "5f5753636b75033a49b7cc81"
},"name": "numberResult","resultType": "Number"
}]
关系:
进程可以具有n个里程碑。里程碑具有一个或没有相位。相具有更多的嵌套路径,但与示例无关。里程碑可以具有n个ResultDeFinitions
解决方法
您可以进行聚合查询并使用$out运算符,这会将查询结果复制到单独的集合中,您可以根据需要修改查询,请参阅最后一个阶段$out: <collection name>
,只需提供集合的名称并执行此查询,这会将结果复制到该集合中,您可以导出该集合。
db.process.aggregate([
{ $unwind: "$milestones" },{
$lookup: {
from: "milestone",let: { id: "$milestones.$id" },pipeline: [
{ $match: { $expr: { $eq: ["$$id","$_id"] } } },{ $unwind: "$results" },{
$lookup: {
from: "resultDefinition",localField: "results.$id",foreignField: "_id",as: "results"
}
},{
$group: {
_id: "$_id",name: { $first: "$name" },order: { $first: "$order" },results: { $push: "$results" }
}
}
],as: "milestones"
}
},{ $unwind: "$milestones" },{
$group: {
_id: "$_id",description: { $first: "$description" },milestones: { $push: "$milestones" }
}
},// you can specify the name of collection that you want
{ $out: "collection name" }
])
,
您还可以通过此命令以JSON格式导出Mongo集合,
mongoexport -d <db-name> -c <collection-name> --out <collection-name>.json