【问题标题】:Look for more than one object with mongoose用猫鼬寻找不止一个对象
【发布时间】:2016-08-08 11:31:11
【问题描述】:

刚开始使用猫鼬。我有一个方法,基本上可以查看我的 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 之类的内容并检查它是否也存储在数据库中,该怎么办。它在我创建此方法的副本时有效,只需将“用户名”:req.body.username 更改为“电子邮件”:req.body.email,但是如果我只想使用一个功能,我可以使用类似User.find({ 'email': req.body.email,''username': req.body.username 等。我尝试了 User.find 技术但它不起作用。我基本上想检查我是否有一个现有的用户名或电子邮件存储在我的数据库中,然后使用此将凭据保存到数据库中

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

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

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

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

    如果我们需要给出多个条件,那么我们需要使用适合我们场景的 $and 或 $or。

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

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

    【讨论】:

    • 我不知道 $and 或 $or,我一定会调查的。
    • 我在答案中添加了 $and 和 $or 引用。请看一下。如果它解决了您的问题,您可以将其标记为已回答,这将对面临类似问题的其他人有所帮助。
    【解决方案2】:

    您可以将 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

    【讨论】:

      猜你喜欢
      • 2019-04-25
      • 1970-01-01
      • 1970-01-01
      • 2019-01-15
      • 2017-04-27
      • 1970-01-01
      • 2013-01-13
      • 1970-01-01
      • 2016-02-05
      相关资源
      最近更新 更多