专业编程基础技术教程

网站首页 > 基础教程 正文

使用mongo封装符合业务场景的列表查询

ccvgpt 2024-10-29 13:19:51 基础教程 48 ℃

1、主对象字段查询

2、数组字段数据的查询过滤(通过$filter处理)

使用mongo封装符合业务场景的列表查询


查询SQL说明

主对象查询notice_code,同时需要查询符合条件的数组字段received_goods_details。首先对主对象进行数据过滤,以减少结果集。在管道的最后,子对象通过$filter处理。

但是经过上面这样处理之后,在业务处理逻辑上是说不通的,常规的列表查询,查询的思路是“有符合条件的才返回”,所以这里还最后还需要补充对组字段received_goods_details进行$filter处理之后,数组数据的长度必须大于0

最后用$or拼接SQL的意思是:如果同时查询多个数组字段,那么只要有一个数组字段能够查询出来数据,就可以返回文档

db.wms_receiving_listing.aggregate([
    {
        "$match": {
            "$and": [
                {
                    "notice_code": "202312072232"
                }
            ]
        }
    },
    {
        "$sort": {
            "sys_created_timestamp": -1
        }
    },
    {
        "$skip": 0
    },
    {
        "$limit": 99999
    },
    {
        "$project": { 
            "sys_creator": 1,
            "_id": 1,
            "owner_code": 1,
            "ledger_code": 1,
            "pending_total_qty": 1,
            "notice_code": 1,
            "received_goods_details": {
                "$filter": {
                    "input": "$received_goods_details",
                    "as": "received_goods_details",
                    "cond": {
                        "$and": [
                            {
                                "$eq": [
                                    "$received_goods_details.sn",
                                    "FRU-200NVX2-PDB"
                                ]
                            },
                            {
                                "$ne": [
                                    "$received_goods_details.received_goods_details_id",
                                    "567"
                                ]
                            },
                            {
                                "$eq": [
                                    "$received_goods_details.goods_id",
                                    "FRU-200NVX2-PDB"
                                ]
                            }
                        ]
                    }
                }
            }
        }
    },
    {
        "$match": {
            "$or": [
                {
                    "received_goods_details.0": {
                        "$exists": true
                    }
                }
            ]
        }
    }
])

最近发表
标签列表