Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Tree Root 1 */
- {
- "_id" : LUUID("9f3a73df-bca7-48b7-b111-285359e50a02"),
- "name" : "Root 1",
- "children" : [
- LUUID("ca01f1ab-7c32-4e6b-a07a-e0ee9d8ec5ac"),
- LUUID("6dd8c8ed-4a60-41ca-abf1-a4d795a0c213")
- ]
- },
- /* Child 1 - Root 1 */
- {
- "_id" : LUUID("ca01f1ab-7c32-4e6b-a07a-e0ee9d8ec5ac"),
- "parentId" : LUUID("9f3a73df-bca7-48b7-b111-285359e50a02"),
- "reference" : {
- "type" : "someType",
- "id" : LUUID("331503FB-C4D1-4F7A-A461-933C701EF9AB")
- },
- "rootReferenceId" : LUUID("9f3a73df-bca7-48b7-b111-285359e50a02"),
- "rootReferenceIdAsString" : "9f3a73df-bca7-48b7-b111-285359e50a02",
- "name" : "Child 1 (Root 1)"
- }
- /* Child 2 - Root 1 */
- {
- "_id" : LUUID("6dd8c8ed-4a60-41ca-abf1-a4d795a0c213"),
- "parentId" : LUUID("9f3a73df-bca7-48b7-b111-285359e50a02"),
- "reference" : {
- "type" : "someType",
- "id" : LUUID("23E8B540-3EFB-455A-AA5C-2B67D6B59943")
- },
- "rootReferenceId" : LUUID("9f3a73df-bca7-48b7-b111-285359e50a02"),
- "rootReferenceIdAsString" : "9f3a73df-bca7-48b7-b111-285359e50a02",
- "displayName" : "Child 2 (Root 1)"
- }
- /* Tree Root 2 */
- {
- "_id" : LUUID("27f2b4a6-5471-406a-a39b-1e0b0f8c4eb9"),
- "name" : "Root 2",
- "children" : [
- LUUID("ad4ad076-322e-4c26-8855-91c9b1912d1f"),
- LUUID("66452420-dd2f-4d27-91c9-78bd0990817c")
- ]
- },
- /* Child 1 - Root 2 */
- {
- "_id" : LUUID("ad4ad076-322e-4c26-8855-91c9b1912d1f"),
- "parentId" : LUUID("27f2b4a6-5471-406a-a39b-1e0b0f8c4eb9"),
- "reference" : {
- "type" : "someType",
- "id" : LUUID("331503FB-C4D1-4F7A-A461-933C701EF9AB")
- },
- "rootReferenceId" : LUUID("27f2b4a6-5471-406a-a39b-1e0b0f8c4eb9"),
- "rootReferenceIdAsString" : "27f2b4a6-5471-406a-a39b-1e0b0f8c4eb9",
- "displayName" : "Child 1 (Root 2)"
- }
- /* Child 2 - Root 1 */
- {
- "_id" : LUUID("6dd8c8ed-4a60-41ca-abf1-a4d795a0c213"),
- "parentId" : LUUID("9f3a73df-bca7-48b7-b111-285359e50a02"),
- "reference" : {
- "type" : "someType",
- "id" : LUUID("23E8B540-3EFB-455A-AA5C-2B67D6B59943")
- },
- "rootReferenceId" : LUUID("9f3a73df-bca7-48b7-b111-285359e50a02"),
- "displayName" : "Child 2 (Root 1)"
- }
- db.getCollection('test').aggregate([
- {
- $match: {
- rootReferenceId: { $ne: null }
- }
- },
- {
- $group: {
- _id: "$rootReferenceId",
- referenceIds: { $addToSet: "$reference.id" }
- }
- }
- ])
- /* 1 */
- {
- "_id" : LUUID("27f2b4a6-5471-406a-a39b-1e0b0f8c4eb9"),
- "referenceIds" : [
- LUUID("331503fb-c4d1-4f7a-a461-933c701ef9ab")
- ]
- }
- /* 2 */
- {
- "_id" : LUUID("9f3a73df-bca7-48b7-b111-285359e50a02"),
- "referenceIds" : [
- LUUID("23e8b540-3efb-455a-aa5c-2b67d6b59943"),
- LUUID("331503fb-c4d1-4f7a-a461-933c701ef9ab")
- ]
- }
- {
- LUUID("27f2b4a6-5471-406a-a39b-1e0b0f8c4eb9") : [
- LUUID("331503fb-c4d1-4f7a-a461-933c701ef9ab")
- ]
- LUUID("9f3a73df-bca7-48b7-b111-285359e50a02") : [
- LUUID("23e8b540-3efb-455a-aa5c-2b67d6b59943"),
- LUUID("331503fb-c4d1-4f7a-a461-933c701ef9ab")
- ]
- }
- db.getCollection('test').aggregate([
- { "$match": { "rootReferenceId": { "$ne": null }}},
- { "$group": {
- "_id": "$rootReferenceIdAsString",
- "referenceIds": { "$addToSet": "$reference.id" }
- }},
- { "$group": {
- "_id": null,
- "data": {
- "$push": { "k": "$_id", "v": "$referenceIds" }
- }
- }},
- { "$replaceRoot": { "newRoot": { "$arrayToObject": "$data" }}},
- {
- "$project": {
- "difference": { "$setDifference": [ "$9f3a73df-bca7-48b7-b111-285359e50a02", "$27f2b4a6-5471-406a-a39b-1e0b0f8c4eb9" ] }
- }
- }
- ])
- db.getCollection('test').aggregate([
- { "$match": { "rootReferenceId": { "$ne": null }}},
- { "$group": {
- "_id": "$rootReferenceId",
- "referenceIds": { "$addToSet": "$reference.id" }
- }},
- { "$group": {
- "_id": null,
- "data": {
- "$push": { "k": { "$toString": "$_id" }, "v": "$referenceIds" }
- }
- }},
- { "$replaceRoot": { "newRoot": { "$arrayToObject": "$data" }}}
- ])
- db.getCollection('test').aggregate([
- { "$facet": {
- "allInRoot1": [{
- "$match": { "rootReferenceId": LUUID("9f3a73df-bca7-48b7-b111-285359e50a02") }
- }],
- "allInRoot2": [{
- "$match": { "rootReferenceId": LUUID("27f2b4a6-5471-406a-a39b-1e0b0f8c4eb9") }
- }]
- }}, {
- "$project": {
- "difference": {
- "$filter": {
- "input": "$allInRoot1",
- "as": "this",
- "cond": { "$in": [ "$$this.reference.id", { "$setDifference": [ "$allInRoot1.reference.id", "$allInRoot2.reference.id" ] } ] }
- }
- }
- }
- }
- ])
Add Comment
Please, Sign In to add comment