- 云函数 聚合操作内的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()
1 个回复
DCloud_uniCloud_WYQ
title和stock是副表字段,let内定义的是主表字段