收藏
回答

对象数组 使用 elemMatch + _.and 查询结果为空(不正确)

框架类型 问题类型 终端类型 AppID 环境ID 基础库版本
小程序 Bug 工具 wx5e2e5112f82b0c08 release-5grndzb2402df0a5 2.14

1 测试数据 及 查询代码

{"_id":"5b049cc8622b232d102331c1093008a3","array":[100.0,200.0],"a2":[{"price":10.0}]}
{"_id":"bf4a0bf2622b237613f4e3a416172934","array":[60.0,80.0],"a2":[{"price":100.0}]}

db.collection("test") //  返回 a2数组中 匹配 price 大于等于10且小于等于100 的记录
  .where({
    a2: _.elemMatch({price:_.and(_.gte(10), _.lte(100))})
  })
  .get()


2 微信开发者工具上查询能返回正确结果


3 腾讯云-云开发 控制台 及 云函数上相同的代码 返回为空


wx-server-sdk : 2.6.0

云函数版本node12


回答关注问题邀请回答
收藏

2 个回答

  • %
    %
    2022-03-12

    ca, 试了这种写法 "a2.price", 就通过了。。。

    那就先这样吧

    db.collection("test") 
      .where({
        "a2.price": _.gte(10).lte(10) 
      })
      .get()
    



    参考 https://docs.mongodb.com/v4.2/tutorial/query-array-of-documents/

    db.inventory.find( { "instock.qty": { $gt: 10,  $lte: 20 } } )

    注: 使用”a2.price" 和 a2: _.elemMatch{} 在查询逻辑是不一样的, 但我的业务上可以这么”处理“先,任何一个元素的field满足就行。


    2022-03-12
    有用
    回复
  • 郑旭东
    郑旭东
    2022-03-12

    _openid的权限问题?

    2022-03-12
    有用
    回复 1
    • %
      %
      2022-03-12
      不是, 查询条件不用_.and, 改成只用 一个大于,腾讯云控制台能返回数据
      where({
          a2: _.elemMatch({price:_.gte(10)})
        })
      2022-03-12
      回复
登录 后发表内容