收藏
回答

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

框架类型 问题类型 终端类型 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的内容,缺乏经验。有大神帮指点下就好了:)

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

2 个回答

  • 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
    有用 2
    回复 1
    • 2018-09-23

      谢谢!

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

      2018-09-23
      回复
  • 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
    有用
    回复 2
    • C
      C
      2019-05-26

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

      2019-05-26
      回复
    • shawray
      shawray
      2019-10-04
      请问楼主此问题由解决吗?
      2019-10-04
      回复
登录 后发表内容