1***@qq.com
1***@qq.com
  • 发布:2023-11-30 13:56
  • 更新:2023-12-01 11:33
  • 阅读:343

联表查询中,如何查询数组内是对象,对象有个属性又是数组,查询中单独查询

分类:uniCloud

我是用的unicloud-db组件,collection是两个临时表的数组。查询回来的数据里面有一个数据是这样的:

demo_data:[  
    {  
        id:"id1",  
        list:["1","2","3"]  
    },  
    {  
        id:"id2",  
        list:["3","4","5"]  
    }  
]

如果我用demo_data.list这种结构来查询的话,条件是["2","3","4"]居然可以查询出来,可我想要的是:

demo_data:[  
    {  
        id:"id1",  
        list:["2","3","4"]  //这里包含["2","3","4"],而不是demo_data下所有list包含["2","3","4"]  
    },  
    {  
        id:"id2",  
        list:["3","4","5"]  
    }  
]

请问一下,这种我应该怎么查询?
因为我另外还有多个查询条件。所以用的是db.command这种语法

2023-11-30 13:56 负责人:无 分享
已邀请:
DCloud_uniCloud_WYQ

DCloud_uniCloud_WYQ

你要的效果是完全相等还是[“2”,“3”,“4”,“5”]也能匹配到

  • 1***@qq.com (作者)

    上面的demo_data里面不是有两个数组嘛,仅匹配其中一个数组,而不是两个数组里的项合并起来匹配。(至于完全相等还是仅有部分相等我可以通过dbCmd.all()或者dbCmd.in()来设置。如:条件是["2","3","4"]的话,上方第一个代码块的数据则不能匹配(因为2 3 4 是分开在两个数组,而不是仅在一个数组),第二个代码块的数据则可以匹配,)

    2023-12-01 11:49

  • DCloud_uniCloud_WYQ

    回复 1***@qq.com: 按照下面的写法可以查到你需要的数据


    const db = uniCloud.database()  
    const _ = db.command
    const $ = _.aggregate
    const res = await db.collection('test').where(
    _.expr(
    $.in([true,
    $.map({
    input: '$demo_data',
    as: 'item',
    in: $.eq(['$$item.list', ["2", "3", "4"]])
    })
    ]))
    ).get();

    2023-12-01 15:57

要回复问题请先登录注册