2017-01-23 8 views
0

私はグループチャットアプリケーションを作成しようとしています。しかし、私は配列に同じid(文字列)を置くと、一意のtrueは動作せず、同じidが配列に追加され、私はこれを例として終わります。私はIDのユーザIDの配列を含むようにしたいだけのユニークなIDのMongoose独自の真の文字列の配列で動作しません

{ _id: 5885dc260a6bd22768bef387, 
    roomName: 'Room1', 
    author: '587cd401a279b834b0a4cb8d', 
    __v: 0, 
    messages: [], 
    usersIds: 
    [ 587cd401a279b834b0a4cb8d, 
    587cd3ed7bd35b37d4c75a36, 
    587cd3ed7bd35b37d4c75a36 ] } 

これは、これは私が特定の部屋でユーザーIDにユーザーを追加する方法である私の部屋スキーマ

const roomChat = new Schema({ 
     roomName: String, 
     author: String, 
     usersIds:[ 
      { 
       type: Schema.ObjectId, 
       unique: true 
      } 
     ], 
     messages: [ 
      { 
       author: String, 
       text: String, 
       date: Number 
      } 
     ] 
    }); 

ある

app.put('/roomChat', (req, res) => { 
      GroupChat.findByIdAndUpdate(req.body.roomId, {$push:{usersIds:req.body.userId}},{safe: true},(err,room) => { 
       console.log(room); 
      }); 
     }); 
+0

'$ push'の代わりに' $ addToSet'を使います。つまり、{$ addToSet:{usersIds:req.body.userId}}です。 – chridam

答えて

1

だけ$pushの代わりに$addToSetを使用してください。

app.put('/roomChat', (req, res) => { 
    GroupChat.findByIdAndUpdate(req.body.roomId, {$addToSet:{usersIds:req.body.userId}},{safe: true, new:true},(err,room) => { 
      console.log(room); 
     }); 
}); 
+0

まだ一意な真偽が必要ですか? –

+0

いいえ、あなたのスキーマに 'unique:true'は必要ありません –

関連する問題