用猫鼬寻找多个物体

时间:2016-08-08 01:59:00

标签: node.js mongodb mongoose

刚开始使用猫鼬。我有一个基本上查看我的JSON对象的方法。我使用方法findOne来做到这一点,

User.findOne({ 'username': req.body.username }, function(err, user) { if(user) { console.log('that username is taken'); } if (err) { return done(err); } });

我的问题是,如果我想检索req.body.email之类的内容并检查它是否也存储在数据库中该怎么办?它在我创建这个方法的副本时工作,只需将'username':req.body.username更改为'email':req.body.email,但是如果我只想使用一个函数,我可以使用类似的东西吗? User.find({'email':req.body.email,''username':req.body.username等。我尝试了User.find技术但它不起作用。我基本上想检查一下是否存在存储在我的数据库中的用户名或电子邮件,然后使用此

将凭据保存到数据库

userDetails.save(function(err) { if (err) throw err; });

并在一个方法中完成,但我不知道如何合并这两个方法。

2 个答案:

答案 0 :(得分:1)

我们在find或findone中指定的条件是在我们的集合中查找匹配的记录。我们不能提供条件,例如用户名和电子邮件。

如果我们需要提供多个条件,那么我们需要使用$和/或$或适合我们的场景。

$和 - https://docs.mongodb.com/manual/reference/operator/query/and/

$或 - https://docs.mongodb.com/manual/reference/operator/query/or/

答案 1 :(得分:0)

您可以将updateMany / update与multi:true。

一起使用
User.updateMany({
  $or:[
  {
  'username': req.body.username
  },
  {
   'email':res.body.email
  }]
 , userDetail}, function(err, user) {
  if(user) {
    console.log('that username is taken');
  }
  if (err) {
    return done(err);
  }
});

如果要创建整个记录,如果查询不匹配,则使用upsert:true