2017-04-15 135 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