2017-04-15 105 views
1

我想追加一個字符串到一個數組,將用於識別多個聊天室中的用戶。我已經嘗試過,無法讓這個工作。日誌不熄什麼,但:追加到數組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); 
       } 
      }); 
     } 

蒙戈結構

{ 
    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}}] 
} 

回答

0

讓我們只專注於下面的代碼片段:

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

首先,請驗證您是否在此查詢中獲取用戶。也許,你沒有得到第一個用戶,因此更新不起作用。而且,在這種情況下你不會得到任何錯誤。其次,如果你得到用戶,然後更新你的$addToSet查詢爲:{ $addToSet: { chatid: {mid: req.body.value}}}。這些方括號可能會導致問題。

您的查詢對我來說似乎很好,這讓我懷疑你傳遞的參數。確保req.body.value不是nullundefined。在這種情況下,更新不會發生,您也不會收到任何錯誤!

+0

我照你說的去做了。我修改代碼,如下所示: \t \t \t \t app.model.User.update( \t \t \t \t {_id:req.locals.user._id}, \t \t \t \t {$ addToSet:{chatid: {中期:req.body.value}}}, \t \t \t \t功能(ERR,結果){ \t \t \t \t \t如果(結果) \t \t \t \t \t \t console.log(result); \t \t \t \t \t} \t \t \t \t); 之後,setid正在工作。我感謝你的幫助,並發現它絕對有用。 – Justin

+0

我修改後的代碼如下: app.model.User.find({ 「chatid」:{$ elemMatch:{ 「_id」:req.body.value}}} 。 代碼現在工作完全我很欣賞你幫助!注意:中間改爲_id。 – Justin