使用Mongoose在MongoDB中更新文档中数组的元素

时间:2018-10-29 10:48:06

标签: arrays node.js mongodb mongoose

我有一个MongoDB数据库,该数据库具有以下结构:

 {
    "_id" : ObjectId("5b670eefe94672265ca59428"),
    "duration" : {
        "start" : ISODate("2018-09-01T00:00:00.000Z"),
        "end" : ISODate("2018-09-01T00:00:00.000Z")
    },
    "title" : "Example title.",
    "description" : "<p>Hi example!</p>",
    "slug" : "title",
    "insertDate" : ISODate("2018-08-05T14:51:27.194Z"),
    "webData" : [ 
        {
            "_id" : ObjectId("5bb1f082931c536950ade361"),
            "webCode" : "be_mx",
            "categories" : [ 
                {
                    "_id" : ObjectId("3sdf43f34543et35tret435"),
                    "name" : "Category 1",
                    "webCode" : "be_mx",
                    "slug" : "category-1"
                },{
                    "_id" : ObjectId("3sdf43f34543et35tretert"),
                    "name" : "Category 2",
                    "webCode" : "be_mx",
                    "slug" : "category-2"
                }
            ]            
        }
    ],
    "__v" : 6,
    "lastEditionDate" : ISODate("2018-10-01T10:01:38.889Z")    
}

我想更新此集合中所有类别为_id =“ 3sdf43f34543et35tret435”(在本示例中为“类别1”)的文档,并且我想将此元素类别设置更新为,例如, “类别3”。

我尝试使用以下代码进行操作:

Collection.update({
            "webData.categories": {
                    $elemMatch: {
                        _id: ObjectId("3sdf43f34543et35tret435")
                    }
                }
            }, {
                $set: {
                    webData: {
                        "categories.$.slug": "category-3"
                    }
                }
            }, {
                multi: true
            }, (err, res) => {
                if (err) { console.log(err); }
                console.log(res);
            });

执行该操作时,所有具有该类别的文档都被编辑,但是这是错误的,因为所有相关类别都被删除了。

您可以帮我进行此操作吗?

谢谢!

已编辑

当我在数据库中执行此查询时:

db.getCollection("scholarships").update({}, 
{ '$set': { 'webData.[].categories.$[category].slug': "nana" } }, 
{ multi: true, arrayFilters: [{ 'category._id': ObjectId("5b719d821f3f1131ec4524f6") }] })

这次使用arrayFilter,我收到此错误:

文档中必须存在路径“ webData。[]。categories”才能应用数组更新。”

0 个答案:

没有答案