7***@qq.com
7***@qq.com
  • 发布:2021-11-26 17:26
  • 更新:2021-11-29 11:48
  • 阅读:565

云数据库聚合操作pipeline的问题

分类:uniCloud

  • 云函数 聚合操作内的lookup内有如下例子, 官方文档说"在 pipeline 中无法直接访问输入记录的字段,必须通过 let 定义之后才能访问,", 为啥例子里面'$title'和'$stock' 可以不用定义
  • 我测试了一下也发现, 不在let里面定义 数据库内的字段也可以直接访问..
以下操作连接 orders 和 books 集合,要求两个条件:  

    orders 的 book 字段与 books 的 title 字段相等  
    books 的 stock 字段 大于或等于 orders 的 quantityorders 字段  

    const db = cloud.database()  
    const dbCmd = db.command  
    const $ = dbCmd.aggregate  
    let res = await db.collection('orders').aggregate()  
    .lookup({  
      from: 'books',  
      let: {  
        order_book: '$book',  
        order_quantity: '$quantity'  
      },  
      pipeline: $.pipeline()  
        .match(dbCmd.expr($.and([  
          $.eq(['$title', '$$order_book']),  
          $.gte(['$stock', '$$order_quantity'])  
        ])))  
        .project({  
          _id: 0,  
          title: 1,  
          author: 1,  
          stock: 1  
        })  
        .done(),  
      as: 'bookList',  
    })  
    .end()
2021-11-26 17:26 负责人:无 分享
已邀请:
DCloud_uniCloud_WYQ

DCloud_uniCloud_WYQ

title和stock是副表字段,let内定义的是主表字段

该问题目前已经被锁定, 无法添加新回复