MongoDb Compass 将 db ref 导出为嵌入式 JSON
MongoDb Compass export db ref as embedded JSON
有没有办法将所有 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,
"results": [
{
"$ref": "resultDefinition",
"$id": {
"$oid": "5f5753636b75033a49b7cc7d"
}
},
{
"$ref": "resultDefinition",
"$id": {
"$oid": "5f5753636b75033a49b7cc7e"
}
},
{
"$ref": "resultDefinition",
"$id": {
"$oid": "5f5753636b75033a49b7cc7f"
}
},
{
"$ref": "resultDefinition",
"$id": {
"$oid": "5f5753636b75033a49b7cc80"
}
},
{
"$ref": "resultDefinition",
"$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
您还可以通过此命令以 JSON 格式导出 Mongo 集合,
mongoexport -d <db-name> -c <collection-name> --out <collection-name>.json
您可以进行聚合查询并使用 $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"
}
},
{ $unwind: "$results" },
{
$group: {
_id: "$_id",
name: { $first: "$name" },
order: { $first: "$order" },
results: { $push: "$results" }
}
}
],
as: "milestones"
}
},
{ $unwind: "$milestones" },
{
$group: {
_id: "$_id",
name: { $first: "$name" },
description: { $first: "$description" },
milestones: { $push: "$milestones" }
}
},
// you can specify the name of collection that you want
{ $out: "collection name" }
])
有没有办法将所有 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,
"results": [
{
"$ref": "resultDefinition",
"$id": {
"$oid": "5f5753636b75033a49b7cc7d"
}
},
{
"$ref": "resultDefinition",
"$id": {
"$oid": "5f5753636b75033a49b7cc7e"
}
},
{
"$ref": "resultDefinition",
"$id": {
"$oid": "5f5753636b75033a49b7cc7f"
}
},
{
"$ref": "resultDefinition",
"$id": {
"$oid": "5f5753636b75033a49b7cc80"
}
},
{
"$ref": "resultDefinition",
"$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
您还可以通过此命令以 JSON 格式导出 Mongo 集合,
mongoexport -d <db-name> -c <collection-name> --out <collection-name>.json
您可以进行聚合查询并使用 $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"
}
},
{ $unwind: "$results" },
{
$group: {
_id: "$_id",
name: { $first: "$name" },
order: { $first: "$order" },
results: { $push: "$results" }
}
}
],
as: "milestones"
}
},
{ $unwind: "$milestones" },
{
$group: {
_id: "$_id",
name: { $first: "$name" },
description: { $first: "$description" },
milestones: { $push: "$milestones" }
}
},
// you can specify the name of collection that you want
{ $out: "collection name" }
])