2017-01-23 43 views
0

我正在尝试创建群聊应用程序。但是,当我把相同的ID(字符串)数组,唯一的真正的不工作,相同的ID被添加到数组,我最终以此为例。我想ID的用户id数组为只包含唯一的ID猫鼬独特真正不工作在字符串数组

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

这是我的房间模式

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

这是我如何将用户添加到用户id在特定的房间

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

刚使用$addToSet代替$push

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' –