请教如何在数据库查询时使用对象数组类型字段的值
发布于 5 年前 作者 qianmin 5061 次浏览 来自 问答
  • 需求的场景描述(希望解决的问题)

例如下列数据:

[
  {
    "_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 回复
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()

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

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

我把上面数据中的张三的“射击”的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 还能帮帮我吗?

回到顶部