2017-04-15 20 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}]} } 
      ); 

、してくださいこのクエリでユーザーを取得しているかどうかを確認します。たぶん、あなたは最初の場所でユーザーを取得していないので、更新は機能しません。さらに、このシナリオではエラーは発生しません。

2番目に、$addToSetというクエリを更新する場合は、{ $addToSet: { chatid: {mid: req.body.value}}}と入力してください。これらの角括弧はここで問題を引き起こす可能性があります。

あなたのクエリは、私はあなたが渡しているパラメータを疑う作るこれ、私には罰金です。 req.body.valuenullまたはundefinedでないことを確認してください。その場合、更新は行われず、エラーも発生しません!

+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(結果)。 \t \t \t \t \t} \t \t \t \t)。 そうした後SETIDは今働いています。私はあなたの助けに感謝し、それが絶対に有用であることがわかりました。 – Justin

+0

私のようにコードを修正:私は本当にあなたに感謝 コードは今、完全に動作します。app.model.User.find({req.body.value}} "chatid":{$ elemMatch::{ "_id"} ヘルプ!注:midを_idに変更しました。 – Justin

関連する問題