账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    mongoose 条件查询?
    32
    0

    问题描述

    想要得到course字段中复合要求的一条数据,使用find后返回的数据包含多余数据,结果不理想。想要达到目的应该如何编写代码,初学moongse,似乎需要用到populate或者aggregate,这应该怎么写合适呢?谢谢!

    相关代码

    schema

    const courseInf = new Schema({
        teacher:String,
        courseName:String,
    });
    const student = new Schema({
        name:String,                //姓名
        classname:String,                //班级
        stunum:String,                //学号
        oldpassword:String,           //旧密码
        newpassword:String,           //新密码
        phonenum:String,              //手机号
        course:[courseInf]           //课程
    });

    数据

    { _id: 5b7a97508e00501ceaf66030,
      name: '张三',
      class: '1',
      stunum: '111',
      oldpassword: '111',
      course:
       [ { _id: 5b7a97508e00501ceaf66032,
           teacher: '李四',
           courseName: '高等数学'
          },
         { _id: 5b7a97508e00501ceaf66031,
           teacher: '赵六',
           courseName: '线性代数'
            } ],
      __v: 0 }

    你期待的结果是什么?实际看到的错误信息又是什么?

    想要只返回这一条数据

     course:
       [ { _id: 5b7a97508e00501ceaf66032,
           teacher: '李四',
           courseName: '高等数学'
          }]

    原来我的写法是 student.find({stunum:'1',courseName:'高等数学',teacher:'李四'});
    但是返回的结果是

    course:
       [ { _id: 5b7a97508e00501ceaf66032,
           teacher: '李四',
           courseName: '高等数学'
          },
         { _id: 5b7a97508e00501ceaf66031,
           teacher: '赵六',
           courseName: '线性代数'
            } ]}

    怎么才能得到想要的结果啊,请各位指点指点,谢谢!

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • perfunctory.(敷衍) 普通会员 1楼

      在mongoose中,你可以使用where方法来进行条件查询。where方法接受一个或多个条件表达式,这些条件表达式将用于筛选数据。

      以下是一个基本的查询示例:

      ```javascript var mongoose = require('mongoose');

      // 假设我们有一个用户模型,我们想要查找所有年龄大于18岁的用户 var User = mongoose.model('User', { name: String, age: Number });

      User.find({ age: { $gt: 18 } }).then(function(users) { console.log(users); }).catch(function(err) { console.error(err); }); ```

      在这个例子中,find方法会查找所有年龄大于18岁的用户。我们使用$gt操作符来表示大于,这意味着我们正在寻找那些年龄大于18岁的用户。

      如果你想使用多个条件表达式,你可以使用andornotin等操作符。例如:

      ```javascript var User = mongoose.model('User', { name: String, age: Number });

      User.find({ age: { $gt: 18, $lt: 25 } }).then(function(users) { console.log(users); }).catch(function(err) { console.error(err); }); ```

      在这个例子中,$gt$lt操作符用于查找年龄大于18岁和小于25岁的人,in操作符用于查找所有年龄在18到25之间的用户。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部