首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Mongo DB比较两个数组并添加缺少的元素

Mongo DB比较两个数组并添加缺少的元素
EN

Stack Overflow用户
提问于 2020-04-24 23:25:46
回答 1查看 56关注 0票数 1

我有一个状态数组,如下所示。

代码语言:javascript
复制
"statuses" : [
        {
            "name" : "In Progress",
            "created_on" : ISODate("2020-04-20T19:00:07.681Z")
        },
        {
            "name" : "Pending",
            "created_on" : ISODate("2020-04-20T19:00:07.886Z")
        },
        {
            "name" : "Viewed",
            "created_on" : ISODate("2020-04-20T20:10:04.733Z")
        },
        {
            "name" : "Initial Viewed",
            "created_on" : ISODate("2020-04-20T20:10:08.468Z")
        },
        {
            "name" : "Opened",
            "created_on" : ISODate("2020-04-21T01:37:08.582Z")
        },
        {
            "name" : "Completed",
            "created_on" : ISODate("2020-04-21T01:48:46.007Z")
        }
    ]

我有另一个数组,使用它:

代码语言:javascript
复制
"reference": ['In Progress', 'Pending', 'Sent', 'Initial Viewed', 'Viewed', 'Opened', 'Completed']

当我将我的第一个数组与引用数组进行比较时可以看到,第一个数组中缺少'Sent‘,我想用current ISODate()将其添加到我的第一个数组中。我还希望我的第一个数组和第二个数组的顺序相同。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-24 23:31:50

通过在reference上运行$map,您将获得所需的订单。$filter$arrayElemAt可以让你找到一个匹配的元素,当没有匹配的时候,$ifNull可以用来构建新的对象:

代码语言:javascript
复制
db.collection.aggregate([
    {
        $project: {
            result: {
                $map: {
                    input: "$reference",
                    as: "ref",
                    in: {
                        $let: {
                            vars: {
                                matched: {
                                    $arrayElemAt: [ { $filter: { input: "$statuses", cond: { $eq: [ "$$ref", "$$this.name" ] } } }, 0 ]
                                }
                            },
                            in: {
                                $ifNull: [ "$$matched", { name: "$$ref", created_on: new Date() } ]
                            }
                        }
                    }
                }
            }
        }
    }
])

Mongo Playground

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61411856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档