【问题标题】:MongoDB. How to move a document from one array to another? [duplicate]MongoDB。如何将文档从一个数组移动到另一个数组? [复制]
【发布时间】:2019-10-08 16:08:28
【问题描述】:

我有一个 Session 集合。合集如下:

_id:ObjectId(5ce3c94f0e259e7370966c63)
status:Int32(1)
title:String(dfsb)
content:String(fdbfdbfd)
Array(visits):[
]
Array(visits_online):[
    0:Object
        start:Date(2019-05-22T08:06:50.222+00:00)
        _id:ObjectId(5ce5031ae8ee2e83b9ab23ff)
        session_id:ObjectId(5ce3c94f0e259e7370966c63)
        user_id:ObjectId(5ce4f290e2971cc6791e5a11)
        end:Date(2019-05-22T08:06:51.438+00:00)
    1:Object
        start:Date(2019-05-22T08:07:11.512+00:00)
        _id:ObjectId(5ce5032fe8ee2e83b9ab2403)
        session_id:ObjectId(5ce3c94f0e259e7370966c63)
        user_id:ObjectId(5ce4f290e2971cc6791e5a11)
        end:Date(2019-05-22T08:07:11.791+00:00)
]

我需要什么: 我想将一个子文档从visits_online 数组移动到visits 数组

_id:ObjectId(5ce3c94f0e259e7370966c63)
status:Int32(1)
title:String(dfsb)
content:String(fdbfdbfd)
Array(visits):[
        0:Object
        start:Date(2019-05-22T08:06:50.222+00:00)
        _id:ObjectId(5ce5031ae8ee2e83b9ab23ff)
        session_id:ObjectId(5ce3c94f0e259e7370966c63)
        user_id:ObjectId(5ce4f290e2971cc6791e5a11)
        end:Date(2019-05-22T08:06:51.438+00:00)
]
Array(visits_online):[
    1:Object
        start:Date(2019-05-22T08:07:11.512+00:00)
        _id:ObjectId(5ce5032fe8ee2e83b9ab2403)
        session_id:ObjectId(5ce3c94f0e259e7370966c63)
        user_id:ObjectId(5ce4f290e2971cc6791e5a11)
        end:Date(2019-05-22T08:07:11.791+00:00)
]

我想做什么:

Session.update({ _id: '5ce3c94f0e259e7370966c63', 'visits_online._id': mongoose.Types.ObjectId('5ce5031ae8ee2e83b9ab23ff') },
        {
            $pull: { 'visits_online._id': mongoose.Types.ObjectId('5ce5031ae8ee2e83b9ab23ff') },
            $push: { visits: mongoose.Types.ObjectId('5ce5031ae8ee2e83b9ab23ff') },
        })

如果有任何帮助,我将不胜感激。

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    你的 mongo 查询有一个小错误,你需要告诉 mongo 从哪个数组中拉取对象。

    此外,您需要通过 ObjectId 而不是 string 来匹配更新查询中的 _id

    目前您将其传递为 _id : '5ce3c94f0e259e7370966c63' ,但应该是 _id : _id: mongoose.Types.ObjectId('5ce3c94f0e259e7370966c63')

    试试这个:

    Session.update({ 
        _id: mongoose.Types.ObjectId('5ce3c94f0e259e7370966c63'), 
        'visits_online._id': mongoose.Types.ObjectId('5ce5031ae8ee2e83b9ab23ff') 
    },{
        $pull: { visits_online :  { _id: mongoose.Types.ObjectId('5ce5031ae8ee2e83b9ab23ff') }},
        $push: { visits: mongoose.Types.ObjectId('5ce5031ae8ee2e83b9ab23ff') },
    })
    

    更多信息请阅读mongodb $pull documentation。希望对你有帮助!

    【讨论】:

    • 不工作。数据库没有变化
    • 您需要在更新查询的第一个参数中传递ObjectId,而不是字符串。我已经更新了我的答案,请看一下
    • @LisaEnn 成功了吗?
    猜你喜欢
    • 2013-06-05
    • 2021-10-25
    • 1970-01-01
    • 2023-01-08
    • 2018-12-20
    • 1970-01-01
    • 2018-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多