收藏
回答

数据库查询时怎么比较2个字段?

有个number字段,A,B,查询A>B的条件怎么写?A:_.gt(B)不行。

最后一次编辑于  09-25
回答关注问题邀请回答
收藏

3 个回答

  • o0o有脾气的酸奶
    o0o有脾气的酸奶
    11-02

    A > B

    const $ = db.command.aggregate

    db.collection('table2').aggregate()

    .addFields({

        matched: $.gt(['$A', '$B'])

    })

    .match({

        matched:!0

    })

    .end().then(res => console.log(res))

    .catch(err => console.error(err))

    =================

    A*B > 300

    db.collection('table2').aggregate()

    .addFields({

        matched: $.gt([$.multiply(['$A', '$B']), 300])

    })

    .match({

        matched:!0

    })

    .end().then(res => console.log(res))

    .catch(err => console.error(err))

    ==============

    多个数或字段值相乘

    $.multiply(['$A', '$B', 10,....])

    https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-server-api/database/aggregation/operators/multiply.html

    还有很多运算api,自己每个都点一下,看看是什么意思,以后需要的时候,就知道有没有什么api可以使用了



    11-02
    赞同 1
    回复
  • 老张
    老张
    09-26

    暂不支持基于同一条记录某field的任何运算。

    如果非要实现这种需求,请在写入doc的时候添加新field:

    C:A>B

    09-26
    赞同
    回复 8
    • 官人
      官人
      09-26
      不太明白你的意思,一条记录中是没法实现2个字段对比吗?你说的添加一个新的字段是什么意思
      09-26
      回复
    • 老张
      老张
      09-27回复官人
      一条记录不能实现本记录中某个或多个字段的任何运算,比如A=2*B,当然也包括A与B对比。新字段C不就是你要的对比吗,你直接获得C的值不就是得到A与B的对比吗?
      09-27
      回复
    • 官人
      官人
      09-27回复老张
      谢谢你的回复,因为不太理解你的意思,你的意思是添加记录的时候添加一个字段C:A>B,查询的时候以C:A>B为条件吗?
      09-27
      回复
    • 官人
      官人
      09-27回复老张
      能写一段代码做为示例吗?
      09-27
      回复
    • 老张
      老张
      09-27回复官人
      1:添加一条记录:db.col.add({data:{A:value_A,B:value_B,C:A>B}})
      09-27
      回复
    查看更多(3)
  • Xpt
    Xpt
    09-25
    1. 注意是否const _ = db.command;

    2. 注意AB数据是否都是严格的number如1而非'1'类

    09-25
    赞同
    回复 1
    • 官人
      官人
      09-26
      都是number,在同一条记录中的2个字段对进行对比怎么写?
      09-26
      回复
问题标签