收藏
回答

云函数报错 $.pipeline is not a function ?

const cloud = require'wx-server-sdk')

cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})

const db = cloud.database()

const _ = db.command

const $ = db.command.aggregate


// 云函数入口函数
exports.main = async (event, context) => {

省略....



const res = await db.collection('orders')
    .aggregate()
    .addFields(fields)
    .match(conditions)
    .lookup({
      from: 'users',
      let: {
        _openid: '$_openid'
      },
      pipeline: $.pipeline()
        .match(_.expr($.eq(['$_openid', '$$_openid'])))
        .project({
          _id: 0,
          staffNickName: 1,
          nickName: 1
        })
        .done(),
      as: 'userList'
    })
    .sort({
      addTime: -1
    })
    .skip(skip)
    .limit(100)
    .addFields({
      addTimeS: $.dateToString({
        date: '$addTime',
        format: '%Y-%m-%d %H:%M:%S',
        timezone: 'Asia/Shanghai'
      })
    })
    .end()


详细错误日志如下:

START RequestId: a03972e1-311-11ea-a6f9-525400235f2a
Event RequestId: a03972e1-311-11ea-a6f9-525400235f2a
TypeError: $.pipeline is not a function
    at EventHandler.exports.main [as realHandler] (/var/user/index.js:11719)
    at EventHandler.handle (/var/runtime/node8/bootstrap.js:40528)
    at invoke (/var/runtime/node8/bootstrap.js:20822)
    at Timeout.setTimeout [as _onTimeout] (/var/runtime/node8/bootstrap.js:137)
    at ontimeout (timers.js:47511)
    at tryOnTimeout (timers.js:310)
    at Timer.listOnTimeout (timers.js:270)
 
END RequestId: a03972e1-311-11ea-a6f9-525400235f2a
Report RequestId: a03972e1-311-11ea-a6f9-525400235f2a Duration:ms Memory:256MB MaxMemoryUsed:34.148438MB



如标题提示错误,大家遇到过吗?我目的是让子查询输出字段少一些。如果绕开pipeline,还可以用什么办法?

最后一次编辑于  2020-01-07
回答关注问题邀请回答
收藏

3 个回答

  • o0o有脾气的酸奶
    o0o有脾气的酸奶
    2020-01-07

    先试试简单的lookup有没有报错

    await db.collection('orders').aggregate()
        .lookup({
          from: 'users',
          let: {
            _openid: '$_openid'
          },
          pipeline: $.pipeline()
            .match(_.expr($.eq(['$_openid', '$$_openid'])))
            .project({
              _id: ,
              staffNickName: ,
              nickName: 
            })
            .done(),
          as: 'userList'
        })
        .end()
    


    2020-01-07
    有用 2
    回复 1
    • 郑旭东
      郑旭东
      2020-01-07
      谢谢,代码没问题。是可能长时间没部署,用的增量上传,服务端环境版本太老。重新部署云函数问题已解决
      2020-01-07
      回复
  • 老张
    老张
    2020-01-07
    const $ = db.command.aggregate
    
    2020-01-07
    有用 1
    回复 12
    • 郑旭东
      郑旭东
      2020-01-07
      这个有
      2020-01-07
      回复
    • 老张
      老张
      2020-01-07回复郑旭东
      那就可能是基础库不够高了?
      2020-01-07
      回复
    • 郑旭东
      郑旭东
      2020-01-07
      我就奇怪了,服务端还有基础库的概念呀,如果有哪里设置?
      2020-01-07
      回复
    • 郑旭东
      郑旭东
      2020-01-07
      我设的客户端基础库是2.8.0
      2020-01-07
      回复
    • 老张
      老张
      2020-01-07回复郑旭东
      我也奇怪啊,是小程序端还是服务端的问题,难道不是你应该说明清楚的吗?帮你答已经很累了,还要猜?
      2020-01-07
      回复
    查看更多(7)
  • 郑旭东
    郑旭东
    2020-01-07

    另外我发现一个小问题:

    let: {
            _openid: '$_openid'
          }
    
    

    这里的参数里面不能带下划线_,会报错,去掉_可以。

    2020-01-07
    有用
    回复
登录 后发表内容
问题标签