首页 > 解决方案 > 过滤掉空元素文档

问题描述

我们有一个商店系列如下。
我们需要将所有'shop'没有批次的 UNIQUE 返回为空([])。

由于这是聚合中的一个阶段 - 它无法利用索引。
所以我们需要找到最有效的方法来完成上述工作。

{
    "_id": ObjectId("xxxxxx"),
    "shop": "Q4",
    "batch": ["5647"],
},
{
    "_id": ObjectId("xxxxxx"),
    "shop": "Q4",
    "batch": ["2314", "0121"],
},
{
    "_id": ObjectId("xxxxxx"),
    "shop": "Q1",
    "batch": ["5647"],
},
{
    "_id": ObjectId("xxxxxx"),
    "shop": "Q1",
    "batch": [],
}

预期结果:第四季度

标签: mongodbaggregation-frameworkmongodb4.0

解决方案


这是聚合查询,

输入

{
    "_id" : ObjectId("5e33c96b08591b1809677543"),
    "shop" : "Q5",
    "batch" : [
        "5857",
        "5837"
    ]
},

{
    "_id" : ObjectId("5e33c95a08591b1809677542"),
    "shop" : "Q5",
    "batch" : [
        "5657"
    ]
},

{
    "_id" : ObjectId("5e33c93008591b1809677540"),
    "shop" : "Q1",
    "batch" : [
        "5648",
        "5628"
    ]
},

{
    "_id" : ObjectId("5e33c2fe08591b180967753f"),
    "shop" : "Q1",
    "batch" : [ ]
},

{
    "_id" : ObjectId("5e33c2fe08591b180967753e"),
    "shop" : "Q1",
    "batch" : [
        "5647"
    ]
},

{
    "_id" : ObjectId("5e33c2fe08591b180967753d"),
    "shop" : "Q4",
    "batch" : [
        "2314",
        "0121"
    ]
},

{
    "_id" : ObjectId("5e33c2fe08591b180967753c"),
    "shop" : "Q4",
    "batch" : [
        "5647"
    ]
}

询问:

const query = [
    {
        $group: {
            _id: "$shop",
            batch: { $push: "$batch" }
        }
    },
    {
        $match: {
            'batch': { $ne: [] }
        }
    },
    {
        $project: {
            _id: 1
        }
    }

];

db.trades.aggregate(query)

结果

{
    "_id" : "Q5"
},     
{
    "_id" : "Q4"
}

推荐阅读