【问题标题】:mongoose remove an object from a nested array猫鼬从嵌套数组中删除一个对象
【发布时间】:2021-08-11 21:52:02
【问题描述】:

我正在尝试通过从嵌套数组中删除对象来使用猫鼬来更新文档。我的目标文件如下:

user = {
    "userId" : "myId",
    "connections":
    [{
        "dateConnectedUnix": 1334567891,
        "isActive": true,
        "sessions": [
            {"device": "mobile", "country": "US"},
            {"device": "desktop", "country": "US"}
        ]
    }, {
        "dateConnectedUnix": 1334567893,
        "isActive": false,
        "sessions": [
            {"device": "mobile", "country": "CA"},
            {"device": "desktop", "country": "CA"}
        ]
    }]
}

这是我的尝试,但它没有更新文档:

Users.findOneAndUpdate({ "userId": "myId", "connections.dateConnectedUnix": 1334567891 },
    { $pull: { sessions: { device: "mobile" } } }, (err) => {
        if (err) {
            return res.status(404).json({ message: 'Error' });
        }
        return res.status(200).json({
            success: true,
            message: 'success'
        });
    }
);

生成的文档应如下所示:

user = {
    "userId" : "myId",
    "connections":
    [{
        "dateConnectedUnix": 1334567891,
        "isActive": true,
        "sessions": [
            {"device": "desktop", "country": "US"}
        ]
    }, {
        "dateConnectedUnix": 1334567893,
        "isActive": false,
        "sessions": [
            {"device": "mobile", "country": "CA"},
            {"device": "desktop", "country": "CA"}
        ]
    }]
}

基本上它是通过 id 查找用户,然后按日期查找连接,然后如果是移动设备,则删除设备。在我的特定情况下,结果始终是一个匹配的文档、一个匹配的连接和一个匹配的会话。

【问题讨论】:

    标签: javascript node.js mongodb mongoose


    【解决方案1】:

    因为您的会话数组在连接内

    尝试“connections.$.sessions”而不是会话,这样您的查询将是

    Users.findOneAndUpdate({ "userId": "myId", "connections.dateConnectedUnix": 1334567891 },
        { $pull: { "connections.$.sessions" : { device: "mobile" } } }, (err) => {
            if (err) {
                return res.status(404).json({ message: 'Error' });
            }
            return res.status(200).json({
                success: true,
                message: 'success'
            });
        }
    );
    

    【讨论】:

      【解决方案2】:
      Users.findOneAndUpdate({ _id: "myId" }, { $pull: { connections.sessions: { device: "mobile" } } }, { new: true });
      

      【讨论】:

        猜你喜欢
        • 2021-08-23
        • 1970-01-01
        • 2015-09-15
        • 1970-01-01
        • 2019-04-30
        • 1970-01-01
        • 1970-01-01
        • 2016-01-03
        • 1970-01-01
        相关资源
        最近更新 更多