从动态命名的子文档中删除字段的项目

时间:2018-02-05 16:55:18

标签: regex mongodb search wildcard

我有这样的db结构:

{
    "_id" : ObjectId("5a702c1434ddce0015a9fc2b"),
    "create_on_fmt" : "20180130082556",
    "create_on" : ISODate("2018-01-30T08:25:56.222Z"),
    "type" : 1,
    "code" : "3YFZZ",
    "handled_by" : {
            "644e1dd7-2a7f-18fb-b8ed-ed78c3f92c2b" : {
                    "email" : "abca@email.com",
                    "update_on" : ISODate("2018-02-05T15:43:59.612Z"),
                    "update_on_fmt" : "20180205154359"
            }
    }
}

handled_by.XXX.update_on是自动生成且价值不完全时,如何在没有644e1dd7-2a7f-18fb-b8ed-ed78c3f92c2b的情况下返回结果?

我曾尝试db.test.find({"code" : "3YFZZ"}, {'handled_by./%/.update_on':0}).pretty()但未成功。

1 个答案:

答案 0 :(得分:1)

您可以使用$objectToArray在此属性上使用$ project(丢弃它),然后执行$arrayToObject的反向操作以恢复原始形状。试试这个:

db.test.aggregate([
    {
        $addFields: {
            handled_by: {
                $objectToArray: "$handled_by"
            }
        }
    },
    {
        $project: {
            "handled_by.v.update_on": 0
        }
    },
    {
        $addFields: {
            handled_by: {
                $arrayToObject: "$handled_by"
            }
        }
    }
])