Mongoose 聚合管道

定义

Schema

  • const OrderSchema = mongoose.Schema({
      order_id: String,
      uid: Number,
      trade_no: String,
      all_price: Number,
      all_num: Number
    })

     

  • const OrderItemSchema = mongoose.Schema({
      order_item: String,
      title: String,
      price: Number,
      num: Number
    })

     

聚合管道

  • const OrderModel = require('./model/order')
    
    OrderModel.aggregate([
      {
        $lookup: { // 关联查询
          from: 'order_item', // 关联数据库中 order_item 文档
          foreignField: 'order_id', // 关联order_item 文档中的 order_id 字段
          localField: 'order_id', // order 文档中的 order_id 字段
          as: 'items', // 将查询的数据放至 items 字段中
        }
      }
    ], function (err, docs) {
      if (err) {
        console.log('查询失败', err)
        return
      }
      console.log('查询成功', docs)
    })

    根据订单文档查询相关商品信息

  • const OrderItemModel = require('./model/order_item')
    
    OrderItemModel.aggregate([
      {
        $lookup: {
          from: 'order',
          foreignField: 'order_id',
          localField: 'order_id',
          as: 'items'
        }
      }
    ], function (err, docs) {
      if (err) {
        console.log('查询失败', err)
        return
      }
      console.log('查询成功', JSON.stringify(docs))
    })

    根据查询商品文档查询订单号信息

  • const mongoose = require('./model/db')
    const OrderItemModel = require('./model/order_item')
    
    OrderItemModel.aggregate([
      {
        $lookup: {
          from: 'order',
          foreignField: 'order_id',
          localField: 'order_id',
          as: 'order_info'
        }
      },
      {
        $match: {
          "_id": mongoose.Types.ObjectId('62981507e47cc586d63d6056') // 转成 ObjectId
        }
      }
    ], function (err, docs) {
      if (err) {
        console.log('查询失败', err)
        return
      }
      console.log(docs[0])
    })

    查找牛奶商品对应的订单

posted @ 2022-06-03 10:57  霸哥yyds  阅读(96)  评论(0)    收藏  举报