【问题标题】:Mongoose / MongoDB - How to push new array element onto correct parent array elementMongoose / MongoDB - 如何将新数组元素推送到正确的父数组元素上
【发布时间】:2016-01-20 16:10:54
【问题描述】:

mongodb 3.0.7 猫鼬 4.1.12

我想推新元素:“bbb” 到位于外部 orgs 数组中的 groups 数组...

来自这里的原始 mongo 数据:

{
    orgs: [
        {
            org: {
                _bsontype: "ObjectID",
                id: "123456789012"
            },
            groups: [
                "aaa"
            ]
        }
    ],
    _id: {
        _bsontype: "ObjectID",
        id: "888888888888"
    }
}

到这里:

{
    orgs: [
        {
            org: {
                _bsontype: "ObjectID",
                id: "123456789012"
            },
            groups: [
                "aaa",
                "bbb"
            ]
        }
    ],
    _id: {
        _bsontype: "ObjectID",
        id: "888888888888"
    }
}

这是一个硬编码的解决方案,但我不想要 硬编码数组索引(参见 0 中的:'orgs.0.groups')

dbModel.findByIdAndUpdate(

    { _id: ObjectId("888888888888".toHex()), 'orgs.org' : ObjectId("123456789012".toHex()) },
    {   $push : { 'orgs.0.groups' : 'bbb'  
                }
    },
    {   safe: true, 
        upsert: false, 
        new : true
    }
)

...我希望一个简单的 'orgs.$.groups' 可以工作,但没有。也试过 'orgs.groups' ,也没有。 我真的需要先检索 orgs 数组,识别索引吗 然后执行一些第二个操作来推送到正确的 orgs 数组元素?

PS - 建议的重复答案不能解决这个问题

【问题讨论】:

标签: mongodb mongoose mongodb-query


【解决方案1】:

找到解决方案,不得不使用

dbModel.update 

不是

dbModel.findOneAndUpdate nor dbModel.findByIdAndUpdate

在多级文档中使用'$'表示匹配的数组索引时

'orgs.$.groups'

此代码有效:

dbModel.update(

    { _id: ObjectId("888888888888".toHex()), 'orgs.org' : ObjectId("123456789012".toHex()) },
    {   $push : { 'orgs.$.groups' : 'bbb'  
                }
    },
    {   safe: true, 
        upsert: false, 
        new : true
    }
)

我想知道这是否是 mongoose 的错误?似乎很奇怪 findOneAndUpdate 无法工作。

【讨论】:

    猜你喜欢
    • 2020-08-02
    • 2020-07-08
    • 1970-01-01
    • 2015-12-09
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 2014-07-29
    • 2013-09-27
    相关资源
    最近更新 更多