2017-01-04 2 views
0

Ich habe eine Sammlung - so etwas wie:selektiv ein Feld zurückkehren auf einem anderen Feld je in MongoDB

Kommentare: {comment, Eigentümer, anonym}

Die Dokumente könnten:

{ comment "comment1", owner: "Frazer Kirkman", anonymous: false }, 
{ comment "comment2", owner: "Frazer Kirkman", anonymous: true }, 
{ comment "comment3", owner: "HoefMeistert", anonymous: true }. 

Ich möchte den Kommentar immer veröffentlichen und den Besitzer nur veröffentlichen, wenn anonym false ist oder der Benutzer der Besitzer ist.

Also die oben würde diese Rückkehr für Frazer:

{ comment "comment1", owner: "Frazer Kirkman"}, 
{ comment "comment2", owner: "Frazer Kirkman"}, 
{ comment "comment3"}. 

und dies für Hoef:

{ comment "comment1", owner: "Frazer Kirkman"}, 
{ comment "comment2"}, 
{ comment "comment3", owner: "HoefMeistert"}. 

Etwas wie:

Comments.find({},{'comment':1, 'owner':(anonymous || owner==thisUser)}} 
+0

Ich bin mit dieser Server-Seite in einem MeteorJS Projekt. –

+0

doesyour Schema sieht wie folgt aus: '{ Kommentar "comment1", Besitzer: "Frazer Kirkman", annonymous: false }, { Kommentar "comment2", Besitzer: "annonymous", annonymous: true } '? – sergiuz

+0

Siehe diesen Link, da ich denke, dass Sie gerade _id Feld der höchsten Ebene in Mongo ausschließen können. Siehe diesen Link-> https://docs.mongodb.com/v3.2/tutorial/project-fields-from-query-results/ –

Antwort

1

Sie eine Aggregation schaffen, wo die füllen Name des Eigentümers basierend auf dem anonymen Bit. Sie können dies mit einer $cond Bedingungserklärung tun.

Wenn Sie einige weitere Informationen liefern, kann ich Ihnen mit der Aussage helfen. Aber bitte liefern Sie eine Demo-Dokumente. Hier

+0

Danke. Ich habe mit Demo-Dokumenten bearbeitet. –

+0

great - Ich habe 'Comments.aggregate ([{$ project: {'comment': 1, 'owner': {$ cond: {if: {$ eq: [" $ publicShared ", true]}} dann:" $ owner ", sonst: ''}}}}])' - was Besitzer zurückgibt: "" wenn nötig. Danke :) Off Hand, weißt du, wie man nicht Eigentümer, anstatt eine leere Schnur einschließend? –

+0

@FrazerKirkman Ja das ist, was ich meinte. – HoefMeistert

0

ist ein Beispiel dafür, was HoefMeistert

vorgeschlagen
Comments.aggregate([ 
    {}, // match all entries 
    { $project: { "comment":true, 'owner': { $cond: { 
      if: {$and:[{$eq: ["$anonymous",true]}, 
        {$ne: ['$owner',this.userId]} 
        ] }, 
      then: '', else: '$owner'   }  } 
       } 
    } 
]); 
Verwandte Themen