收藏
回答

请教如何在数据库查询时使用对象数组类型字段的值

问题模块 框架类型 问题类型 终端类型 AppID 基础库版本
云开发 小程序 需求 工具 wxd51c34cbd4d7724d 2.3.0

- 需求的场景描述(希望解决的问题)

例如下列数据:

[
  {
    "_id": "1",
    "name": "张三",
    "tag": [
      {
        "type": "射击",
        "point": 8
      },
      {
        "type": "拳击",
        "point": 3
      }
    ]
  },
  {
    "_id": "2",
    "name": "李四",
    "tag": [
      {
        "type": "射击",
        "point": 6
      },
      {
        "type": "大刀",
        "point": 5
      }
    ]
  },
  {
    "_id": "3",
    "name": "王五",
    "tag": [
      {
        "type": "拳击",
        "point": 7
      },
      {
        "type": "射击",
        "point": 6
      },
      {
        "type": "大刀",
        "point": 9
      }
    ]
  }
]

现在需要列出

  1. tag包含type=“拳击”的人

  2. tag包含point>6的人

- 希望提供的能力

    请帮忙给个查询条件的写法。

    也许是我的数据储存格式设计有问题,以前没做过NoSql的内容,缺乏经验。有大神帮指点下就好了:)

最后一次编辑于  2018-09-23  (未经腾讯允许,不得转载)
邀请回答
复制链接收藏关注问题回答

4 个回答

  • Samsara
    Samsara
    2018-09-23
    const _=db.command


    等于拳击或大于6

    db.collection('table').where(_.or([{tag:{type:'拳击'}},{tag:{point:_.gt(6)}}]).then()

    与运算直接逗号分隔就成

    db.collection('table').where({tag:{type:'拳击'},tag:{point:_.gt(6)}}).then()


    还有你的现在的项目是从头开始写的吗?

    2018-09-23
    赞同 22
    回复 1
    • Owl
      Owl
      2018-09-23

      谢谢!

      是的,我的项目上星期开始的

      2018-09-23
      赞同
      回复
  • Owl
    Owl
    2018-09-23

    与运算的写法有点不太理解。

    我把上面数据中的张三的“射击”的point改成7,

    现在希望精确获取  tag里有 type=拳击并且point=7的,因该只会出现 王五。

    用了2种写法,都没成功,都把张三也列出来了。

    db.collection('testtag').where({ tag: { type: '拳击' }, tag: { point: 7 } }).get()

    db.collection('testtag').where({ tag:  {type: '拳击', point: 7} }).get()

    我以为下面这种写法,{type: '拳击', point: 7}会作为一个整体and条件在tag数组里去检索数据,

    但是看到结果,感觉这里是把这2个条件在tag数组里做了or检索。因为张三 有 拳击=3 和 射击=7 ,所以满足了or的条件。


    Samsara 还能帮帮我吗?

    2018-09-23
    赞同
    回复 1
    • CCC0203
      CCC0203
      05-26

      遇到了与楼主相同的问题,不知道现在顶顶有用没有orz

      05-26
      赞同
      回复