2017-04-19 2 views
2

Dies sind Daten, meine ‚Benutzergruppen‘Wie finden Sie in Knoten und Mongodb?

{ 
    "_id": { 
     "$oid": "58f7537ec422895572e988a1" 
    }, 
    "name": "aaa", 
    "groupname": "group north,group south", 
    "mobilenumber": "0509867865", 
    "userid": "6035555c16" 

} 

hier meine Sammlung Daten

{ 
    "_id": { 
     "$oid": "58e5eb3c035555c33f979daf" 
    }, 
    "groupname": "group north", 
    "message": [ 
     { 
      "val": "hai how are you", 
      "key": "1" 
     }, 
     { 
      "val": "i am fine", 
      "key": "2" 
     } 

    ] 
}, 
{ 
    "_id": { 
     "$oid": "3c035555c33f979daf58e5eb" 
    }, 
    "groupname": "group south", 
    "message": [ 
     { 
      "val": "testing", 
      "key": "1" 
     } 

    ] 
}, 
{ 
    "_id": { 
     "$oid": "55c3c035533f979f58e5ebda" 
    }, 
    "groupname": "group east", 
    "message": [ 
     { 
      "val": "where are you from", 
      "key": "1" 
     } 

    ] 
} 

In Usergroup ‚Gruppen‘ Ich versuche, die groupname basierend auf mobilenumber und ich habe zwei Gruppen zu erhalten: group north und group south. Nach dem Abrufen von Gruppenname muss ich die Nachricht abrufen. Wie kann ich dies schreiben, um die Bedingung dafür zu finden? Mein Ziel ist es, group north, group south Nachricht an den Benutzer zu senden.

Usergroup.findOne({ 
      mobilenumber: 0509867865 
     }, 
     function(err, usergroup) { 
      if (err) { 
       return handleError(res, err); 
      } 
      if (!usergroup) { 
       return res.status(404).send('Not Found'); 
      } 
      console.log(usergroup.groupname); 
     //group north ,group south 
      Group.find({ 
        groupname: 
       }, 
       function(err, group) { 
        if (err) { 
         return handleError(res, err); 
        } 

        return res.json(group); 
       }); 
     }); 
+0

Was ist Ihre Mongo-Server-Version? – Veeram

+0

Ich benutze Mongolab –

+0

http://docs.mlab.com/ops/#current-version. Können Sie über diesen Link prüfen? – Veeram

Antwort

1

Sie können den $in Betreiber:

Usergroup.findOne({ 
      mobilenumber: 0509867865 
     }, 
     function(err, usergroup) { 
      if (err) { 
       return handleError(res, err); 
      } 
      if (!usergroup) { 
       return res.status(404).send('Not Found'); 
      } 
      console.log(usergroup.groupname); 
     //group north ,group south 
      Group.find({ 
        groupname: { $in: usergroup.groupname.split(",") } 
       }, 
       function(err, group) { 
        if (err) { 
         return handleError(res, err); 
        } 

        return res.json(group); 
       }); 
     }); 
+0

http://stackoverflow.com/questions/43867811/how-to-douser-ready-there-update-if-not-there-create-in-particular-collecti –

+0

Ich werde versuchen, zu antworten, sobald ich ein erreiche Computer. –

0

Sie einfach die groupname vom Usergroup bekommen kann, split es Array aus zwei Gruppennamen str.split(',') und dann abfragen, die Group für zwei groupname als mit folgen:

Usergroup.findOne({ mobilenumber: 0509867865 }, function(err, usergroup) { 
     if (err) { 
      return handleError(res, err); 
     } 
     if (!usergroup) { 
      return res.status(404).send('Not Found'); 
     } 
     console.log(usergroup.groupname); 

     var groupname = usergroup.groupname; 
     var groups  = groupname.split(','); 
     var messages = {}; 

     for (var i = groups.length - 1; i >= 0; i--) { 
      Group.find({ groupname: groups[i] }, function(err, group) { 
       if (err) { 
        return handleError(res, err); 
       } 
       messages[group.groupname] = group.message; 
      }); 
      if (i == 0) { 
       return res.status(200).json(messages); 
      } 
     } 

    }); 
+0

ich bekomme ein leeres Objekt –

+0

http://stackoverflow.com/questions/43867811/how-to-doer-user-ready-there-update-if-not-there-create-in-particular-collecti –

1

Sie können th verwenden e unter Aggregation für 3.4 Version.

Die Abfrage wird $match Dokumente in der usergroups Sammlung mit dem von $split gefolgt mobilenumber für messages die groupnames und $lookup die groupname in der groups Sammlung aufzuteilen. Letzter Schritt ist $unwind der mobile_group Array zu $project der messages für jeden groupname.

db.usergroups.aggregate([ 
    { $match: { mobilenumber:"0509867865" } }, 
    { $project: { groupname:{ $split: [ "$groupname", ',' ] } } }, 
    { $lookup: 
     { 
      from: "groups", 
      localField: "groupname", 
      foreignField: "groupname", 
      as: "mobile_group" 
     } 
    }, 
    {$unwind:"$mobile_group"}, 
    { $project : { groupname:"$mobile_group.groupname", "messages" : "$mobile_group.message" } } 
]) 
+0

http://stackoverflow.com/questions/43542270/how-can-i-combine-multiple-collection-into-one-collection-using-with-lookup-mon @Veuram hilf mir –

+0

http://stackoverflow.com/questions/ 43867811/how-to-do-Benutzer-bereits-dort-update-wenn-nicht-dort-erstellen-in-particular-collecti –

Verwandte Themen