收藏
回答

云数据库中,每条记录的一个字段是数组,数组的每个元素是对象,怎么可以检索到数组中的某个对象?

比如其中一条记录的一个字段是info:[{gh:001,name:'张三',age:24},{gh:002,name:'李四',age:24},{gh:003,name:'小明',age:24}] ,怎么能以 李四的gh,检索到002呢。望大神指点

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

3 个回答

  • Mr.Zhao
    Mr.Zhao
    2020-07-07
    db.collection('todos').where({
      info: _.elemMatch({
        name: _.eq('李四')
      })
    })
    .get()
    
    db.collection('todos').where({
      'info.name': '李四'
    })
    .get()
    
    2020-07-07
    有用 1
    回复
  • 老张
    老张
    2020-07-07

    aggregate.unwind

    2020-07-07
    有用 1
    回复 3
    • 夏日星辰
      夏日星辰
      2020-07-07
      刚看了下,用Command.elemMatch,这个应该也可以把
      2020-07-07
      回复
    • 老张
      老张
      2020-07-07回复夏日星辰
      这个你会把整条记录取过来,并不能只获取李四的信息。如果是整条记录取过来,你再JS取李四的信息,那就简单了,直接:
      where({'info.name':'李四'})
      2020-07-07
      1
      回复
    • 夏日星辰
      夏日星辰
      2020-07-07
      都是高手
      2020-07-07
      回复
  • 诗歌坊
    诗歌坊
    05-01

    同问。如主题中的例子,请问怎样查询同时满足gh的值为002并且name的值为王五这两个条件的记录的age的值呢?因为info字段是一个数组,那么可能就会有许多name的值为王五、或gh的值为002的元素,怎样去找到同时满足这两个条件的info字段中的某个元素?况且一个数据库存中也可能会包含有更多这样的info字段的记录。怎样把这些记录都列出来?

    05-01
    有用
    回复 1
    • 诗歌坊
      诗歌坊
      05-01
      试了一下,用这个:
        .where({
        info: _.elemMatch({
          name: _.eq('王五'),
          gh:002
        })
      可行。
      但以下两种方法不可行:
      .where({
        zz:{name:_.eq('王五'),gh:002}
      })
      .where({
        'zz.name':_.eq('王五'),
        'zz.gh':002
      })
      05-01
      回复
登录 后发表内容
问题标签