如何在推送到阵列

时间:2017-09-20 22:00:47

标签: node.js express mongoose

我试过搜索但发现非符合我的查询, 我有这样的JSON输出,存在于数据库

{ _id: 59c255f1f3e91433b4d4b58e,
  name: 'example name';,
  __v: 52,
  contacts: 
   [ { contactId: '59c255f1f3e91433b4d4b58e', //duplicated
        _id: 59c2a9f0471ffb202c3771d2,
       added: 2017-09-20T17:48:32.328Z },
      { contactId: '59c255f1f3e91433b4d4b58e', //duplicated
       _id: 59c2ac524fc91235a0d89195,
       added: 2017-09-20T17:58:42.956Z }
      { contactId: '59c255f1f3e91433b4234eff',
       _id: 59c2ac524fc91235a0d89195,
       added: 2017-09-20T17:58:42.956Z }
       ],
}

如何通过此contactId" 59c255f1f3e91433b4d4b58e"检查所有contacts.contactId是否存在?在尝试推送另一个contactId之前, 它不断附加到数组,我需要确保只有一个contactId与" 59c255f1f3e91433b4d4b58e"无论怎样,都会被推到联系人阵列。

我不知道如何做到这一点,我试过了:

User.findOne({_id: req.user.id}, function(err, newadd) { 
if(!newadd === req.req.params.to){ // also tried "indexOf" ^^ "lastIndexOf"
newadd.contacts.push({
    contactId:req.params.to
    })
newadd.save()
}else{
res.end('already exist try again')
}
  })

(我正在使用猫鼬) 我真的很感激任何帮助:(

2 个答案:

答案 0 :(得分:1)

您可以使用$ addToSet,这将不允许在结果数组中重复 了解更多信息$addtoset

上面是mongoose并回答你的approch

 User.findOne({_id: req.user.id}, function(err, newadd) { 
    if(!newadd._id === req.params.to){
    newadd.contacts.push({
        contactId:req.params.to
        })
    newadd.save()
    }else{
    res.end('already exist try again')
    }
  })

答案 1 :(得分:0)

嗯,mybe就像这样

User.findOne({_id: req.user.id}, function(err, newadd) { 
var test = newadd.contacts.filter(function(result){
   if ((result.contactId === req. !.....) === true){
       console.log()
   }else{
       console.log()
   }
})