2016-05-03 16 views
1

Ich habe 2 Sammlung ServiceProvider und Parents

Serviceprovider:

{ 
    "_id" : ObjectId("57285bc0588aeca4178b4567"), 
    "ServiceProviderID" : 193, 
    "Title" : "test1", 
    "PostedMessage" : "test1", 
    "TotalComments" : 0, 
    "TotalShares" : 0, 
    "TotalThanks" : 0, 
    "AddedOn" : "2016-05-03 08:05:20", 
    "LastModifiedOn" : "2016-05-03 08:05:20", 
    "PostAttachment" : { 
     "ImagePath" : "" 
    }, 
    "PostCommentUserIDs" : [ 
     "193", 
     "3" 
    ], 
    "PostComments" : [ 
     { 
      "ID" : "14622628001303558386", 
      "UserID" : 3, 
      "CommentMessage" : "comment by test", 
      "TotalThanks" : 0, 
      "AddedOn" : "2016-05-03 08:06:40", 
      "LastModifiedOn" : "2016-05-03 08:06:40", 
      "CommentAttachment" : { 
       "ImagePath" : "" 
      } 
     } 
    ], 
    "Subscriber" : [ 
     "193", 
     "3" 
    ] 
} 

Eltern:

{ 
    "_id" : ObjectId("572447e6588aec32108b4567"), 
    "ID" : "1", 
    "UID" : "2uwWMABSjBPWdAlSnglAlsY7A1cD1Q7EmHiM9wehxXyY99AQs6eC7rEt", 
    "Name" : "test1", 
    "ProfileImagePath" : "Penguins_1#SIZE#.jpg" 
} 
{ 
    "_id" : ObjectId("572447e6588aec32108b4568"), 
    "ID" : "2", 
    "UID" : "NM8H6oYQW33dRPxn48wkcMYyciYqagRiXUO0cLh0Lvws6eC7rEt", 
    "Name" : "test2", 
    "ProfileImagePath" : "fb_profilepic_879157302148180#SIZE#.jpg" 
} 
{ 
    "_id" : ObjectId("572447e6588aec32108b4569"), 
    "ID" : "3", 
    "UID" : "0Xb1fHqzR3HZVJWQc8aAbB77UkwSnmasdQrtp9qySVdqipsYs6eC7rEt", 
    "Name" : "test3", 
    "ProfileImagePath" : "images3_3_1460348144#SIZE#.jpeg" 
} 
{ 
    "_id" : ObjectId("572447e6588aec32108b456a"), 
    "ID" : "4", 
    "UID" : "xXyY99NaNixXyY99IfuJx4Is8Fv15t9lMC8RYpSgaAbB77zmB65c7vccvYs6eC7rEt", 
    "Name" : "test4", 
    "ProfileImagePath" : "Jyoti_4#SIZE#.png" 
} 
{ 
    "_id" : ObjectId("572447e6588aec32108b456b"), 
    "ID" : "5", 
    "UID" : "leyerH3hMY8UA3ONddJHDOHxXyY99IhhOgAImLZoQJ10RRxXyY99Us6eC7rEt", 
    "Name" : "test8", 
    "ProfileImagePath" : "woman-1_5#SIZE#.jpg" 
} 
{ 
    "_id" : ObjectId("572447e6588aec32108b456c"), 
    "ID" : "6", 
    "UID" : "B414HAxXyY996QezhAmWgJQmjoWUEhsNghXAcKRTEbNNHJXYs6eC7rEt", 
    "Name" : "test5", 
    "ProfileImagePath" : "Chrysanthemum_6#SIZE#.jpg" 
} 

ich ServiceProvider.PostCommentUserIDs anschließen möchten, mit Parents Sammlung, um die Elterninformationen zu erhalten rmation.

Ich habe folgende Abfrage versucht:

db.ServiceProvider.aggregate([ 
    { 
     $unwind: "$PostCommentUserIDs" 
    }, 
    { 
     $lookup: 
     { 
      from: "Parents", 
      localField: "PostCommentUserIDs", 
      foreignField: "ID", 
      as: "ParentDetailsArr" 
     } 
    }, 
    { 
     $match: { "ParentDetailsArr": { $ne: [] }} 
    } 
]) 

Aber es gibt mir 2 Ergebnisse mit der gleichen ServiceProvider._id d.h gleichen Dokument.

{ 
    "_id" : ObjectId("57285bc0588aeca4178b4567"), 
    "ServiceProviderID" : 193, 
    "Title" : "test1", 
    "PostedMessage" : "test1", 
    "TotalComments" : 0, 
    "TotalShares" : 0, 
    "TotalThanks" : 0, 
    "AddedOn" : "2016-05-03 08:05:20", 
    "LastModifiedOn" : "2016-05-03 08:05:20", 
    "PostAttachment" : { 
     "ImagePath" : "" 
    }, 
    "PostCommentUserIDs" : "193", 
    "PostComments" : [ 
     { 
      "ID" : "14622628001303558386", 
      "UserID" : 3, 
      "CommentMessage" : "comment by test", 
      "TotalThanks" : 0, 
      "AddedOn" : "2016-05-03 08:06:40", 
      "LastModifiedOn" : "2016-05-03 08:06:40", 
      "CommentAttachment" : { 
       "ImagePath" : "" 
      } 
     } 
    ], 
    "Subscriber" : [ 
     "193", 
     "3" 
    ], 
    "ParentDetailsArr" : [ 
     { 
      "_id" : ObjectId("572447e6588aec32108b45c6"), 
      "ID" : "193", 
      "UID" : "tvzRNsSiOVca8DoOEV9tMkzU4e0Rx4aMMDcQw3fb88Us6eC7rEt", 
      "Name" : "test1", 
      "ProfileImagePath" : null 
     }, 
     { 
      "_id" : ObjectId("572856a4588aec01178b45c6"), 
      "ID" : "193", 
      "UID" : "tvzRNsSiOVca8DoOEV9tMkzU4e0Rx4aMMDcQw3fb88Us6eC7rEt", 
      "Name" : "test1", 
      "ProfileImagePath" : "images_193_1462255293#SIZE#.jpg" 
     } 
    ] 
} 
{ 
    "_id" : ObjectId("57285bc0588aeca4178b4567"), 
    "ServiceProviderID" : 193, 
    "Title" : "test1", 
    "PostedMessage" : "test1", 
    "TotalComments" : 0, 
    "TotalShares" : 0, 
    "TotalThanks" : 0, 
    "AddedOn" : "2016-05-03 08:05:20", 
    "LastModifiedOn" : "2016-05-03 08:05:20", 
    "PostAttachment" : { 
     "ImagePath" : "" 
    }, 
    "PostCommentUserIDs" : "3", 
    "PostComments" : [ 
     { 
      "ID" : "14622628001303558386", 
      "UserID" : 3, 
      "CommentMessage" : "comment by test", 
      "TotalThanks" : 0, 
      "AddedOn" : "2016-05-03 08:06:40", 
      "LastModifiedOn" : "2016-05-03 08:06:40", 
      "CommentAttachment" : { 
       "ImagePath" : "" 
      } 
     } 
    ], 
    "Subscriber" : [ 
     "193", 
     "3" 
    ], 
    "ParentDetailsArr" : [ 
     { 
      "_id" : ObjectId("572447e6588aec32108b4569"), 
      "ID" : "3", 
      "UID" : "0Xb1fHqzR3HZVJWQc8aAbB77UkwSnmasdQrtp9qySVdqipsYs6eC7rEt", 
      "Name" : "test2", 
      "ProfileImagePath" : "images3_3_1460348144#SIZE#.jpeg" 
     }, 
     { 
      "_id" : ObjectId("572856a4588aec01178b4569"), 
      "ID" : "3", 
      "UID" : "0Xb1fHqzR3HZVJWQc8aAbB77UkwSnmasdQrtp9qySVdqipsYs6eC7rEt", 
      "Name" : "test2", 
      "ProfileImagePath" : "images3_3_1460348144#SIZE#.jpeg" 
     } 
    ] 
} 

Meine Frage ist, wie Gruppe anzuwenden, indem _id oder wie die obige Abfrage zu rekonstruieren, so dass ich die übergeordnete Info-Array mit jedem Dokument erhalten.

+0

sind Sie sicher, dass es nur einen Eintrag für Benutzer 193? – profesor79

+0

Ja, es gibt nur 1 Eintrag mit ID 193 in der Eltern-Sammlung – Chinmay

+0

Ich denke, weil ich 2 Einträge für PostCommentUserIDs habe, gibt es mir 2 verschiedene Ergebnisse. Hast du eine Idee, wie man eine Gruppe mit _id durchführt? Ich versuchte, aber kämpfen, um es Arbeit zu bekommen – Chinmay

Antwort

2

Das ist, was Abwickeln tut. Wie in https://docs.mongodb.org/v3.0/reference/operator/aggregation/unwind/ geschrieben

ein Inventar mit der folgenden STUDIE:

{ "_id" : 1, "item" : "ABC1", sizes: [ "S", "M", "L"] } 

Die folgende Aggregation verwendet die $ Abwickelstation Stufe ein Dokument für jedes Element in der Größen-Array zur Ausgabe:

db.inventory.aggregate([ { $unwind : "$sizes" } ]) 

Die Operation gibt die folgenden Ergebnisse zurück:

{ "_id" : 1, "item" : "ABC1", "sizes" : "S" } 
{ "_id" : 1, "item" : "ABC1", "sizes" : "M" } 
{ "_id" : 1, "item" : "ABC1", "sizes" : "L" } 

Der Standardfall ist, dass Sie die Ressource, die Sie suchen/suchen oder eine andere Operation damit abwickeln wollen, wieder auflösen und dann gruppieren - damit Sie in den "gleichen Zustand" wie zuvor gelangen.

In Ihrem Fall möchten Sie wahrscheinlich zu einer Gruppe es wie folgt

{$group : { _id : "$_id" } } 

Sie werden sehr wahrscheinlich danach $ Push verwenden müssen (google it)

+0

Vielen Dank! Du hast meinen Tag gerettet. Kämpfte damit von Stunden :) – Chinmay