2017-04-15 4 views
1

Ich versuche, eine Zeichenfolge an ein Array anzuhängen, das zur Identifizierung eines Benutzers in mehreren Chatrooms verwendet wird. Ich habe es versucht und kann das nicht zur Arbeit bringen. Das Protokoll ist löschte nichts als:An Array anfügen nodejs mongodb

[]

  if (req.body.method == "setid") { 
      if(req.locals.user.chatid == null){ 
       req.locals.user.chatid = {}; 
      } 

      app.model.User.update(
       { _id: req.locals.user._id }, 
       { $addToSet: { chatid: [{mid: req.body.value}]} } 
      ); 
     } else if (req.body.method == "checkid" && req.body.value) { 
      app.model.User.find({ 
       "chatid": req.body.value 
      }, function(err, FoundUser) { 
       if (err || !FoundUser) { 
        res.end("ERROR"); 
       } else { 
        console.log(FoundUser); 
        res.end(FoundUser[0].displayName); 
       } 
      }); 
     } 

Mongo Struktur

{ 
    email: { type: String, index: { unique: true }, required: true }, 
    password: { type: String }, 
    changeName: {type: Boolean}, 
    displayName: { type: String, index: { unique: true }, required: true }, 
    avatar: { type: String, default: '/assets/anon.png' }, 
    permissions: { 
     chat: { type: Boolean, default: true }, 
     admin: { type: Boolean, default: false } 
    }, 
    online: { type: Boolean, default: true }, 
    channel: { type: Types.ObjectId, ref: 'Channel', default: null }, //users channel 
    banned: { type: Boolean, default: false }, 
    banend: {type:String, default: ''}, 
    subs: [{ type: Types.ObjectId, ref: 'User' }], 
    about: { type: String }, 
    temporary: {type: Boolean, default: false}, 
    chatid:[{mid: {type:String}}] 
} 

Antwort

0

einzigem auf unter Code-Snippet Lassen Sie konzentrieren:

app.model.User.update(
       { _id: req.locals.user._id }, 
       { $addToSet: { chatid: [{mid: req.body.value}]} } 
      ); 

Zuerst bitte Überprüfen Sie, ob Sie einen Benutzer in dieser Abfrage erhalten oder nicht. Vielleicht bekommen Sie den Benutzer nicht an erster Stelle und daher wird das Update nicht funktionieren. Darüber hinaus erhalten Sie in diesem Szenario keinen Fehler.

Zweitens, wenn Sie den Benutzer bekommen, dann aktualisieren Sie Ihre $addToSet Abfrage als: { $addToSet: { chatid: {mid: req.body.value}}}. Diese eckigen Klammern können hier ein Problem verursachen.

Ihre Anfrage scheint mir gut, was mich Zweifel an den Parametern Sie passieren. Stellen Sie sicher, dass req.body.value nicht null oder undefined ist. In diesem Fall wird das Update nicht ausgeführt und Sie erhalten auch keinen Fehler!

+0

Ich tat wie du gesagt hast. Ich änderte den Code wie folgt: \t \t \t \t app.model.User.update ( \t \t \t \t {_id: req.locals.user._id}, \t \t \t \t {$ addToSet: {chatid: {mid: req.body.value}}}, \t \t \t \t Funktion (err, result) { \t \t \t \t \t if (result) \t \t \t \t \t \t console.log (Ergebnis); \t \t \t \t \t} \t \t \t \t); Danach funktioniert das Setid jetzt. Ich schätze Ihre Hilfe und fand es absolut nützlich. – Justin

+0

I modifizierten Code als: app.model.User.find ({ "chatid": {$ elemMatch: { "_id": req.body.value}}} . -Code funktioniert nun vollständig ich wirklich zu schätzen Ihre Hilfe! Hinweis: geändert in _id. – Justin