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

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

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    mongoose如何查询内嵌子文档的不同数据?
    • 2019-09-03 00:00
    • 10
    26
    0

    比如自己有一个users集合,/models/下users的Schema为

    var mongoose = require("mongoose");
    var Schema = mongoose.Schema;
    
    var userSchema = new Schema({
        "userId": String,
        "userPhone": String,
        "password": String,
        "createTime": String,
        "orderList": [{
            "orderId": String,
            "createTime": String,
            "orderStatus": String,
            "orderTotal": String,
            "productList": Array
        }]
    })
    module.exports = mongoose.model("users", userSchema)

    然后路由orders有一个获取订单列表的接口,需要分页的,下面是自己粗糙的写法

    var Users = require('../models/users');
    router.get('/orderList', (req, res, next) =>{
      let userId = req.get("userId");
      let pageNumber = req.param("pageNumber");
      let pageSize = req.param("pageSize");
      let skip = (pageNumber - 1) * pageSize;
      let orderType = 2; //比如订单类型为2,对应orderStatus=2
      //var query = Users.findOne({ 'userId': userId });
      //全部的订单
      if (orderType == '-1'){
        //如何查询?query.limit(pageSize).skip(skip);
      }else{
        //其他类型订单,如何查询?下面是错误提示
        //query = Users.find({'userId': userId },{'orderList.orderStatus'...})等等?
      }
      query.exec((err, doc) =>{
        if(err){
          util.errorCallBack(err,res)
        }else{
          //console.log('doc', doc);
          var returnOrder = [];
          returnOrder = (doc === null) ?  [] : doc;
          res.json({
            status: 200,
            data: {
              list: returnOrder
            }
          })
        }
      })
    })

    假设users集合里已经有5个用户了,每个用户已经有自己的订单了。
    那么该如何查询指定用户(比如userId=10001)下不同类型(比如orderStatus=2)的订单或者全部订单?
    自己是第一次使用和写这个,网上找了一遍,也看了一些文档,尝试了很多方法比如($elemMatch、where、$and)等,都没能正确查询出不同类型的订单。可能自己写错了,希望高手能指导一下。
    https://mongoosejs.com/docs/s...
    http://www.mongoing.com/docs/...

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • 离心痛  η° 普通会员 1楼

      在mongoose中,你可以使用find()方法的sort()方法来查询内嵌子文档的不同数据。以下是一个示例:

      ```javascript var User = mongoose.model('User', UserSchema);

      User.find({ name: { $regex: /[\u4e00-\u9fa5]/ }, email: { $regex: /[\u4e00-\u9fa5]/ } }).sort('-name', '-email') .exec(function(err, users) { if (err) { console.error(err); return; } console.log(users); }); ```

      在这个示例中,我们首先定义了一个名为User的模型,它有一个名为nameemail的字段。然后,我们使用find()方法来查找所有名字和电子邮件中包含Unicode字符的用户。最后,我们使用sort()方法来按照名字和电子邮件的降序对结果进行排序。

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