更新mongodb中的深层嵌套对象字段

时间:2019-04-06 05:57:00

标签: javascript mongodb

我正在尝试更新我的收藏regRecord的字段。我想遍历集合中的每个文档,并更新所有节点的_class字段。

这是我实际收藏的样子。我想更新每个对象的_class字段。这里的entry节点是array,而value节点是一个对象,我不能使用mongo的游标遍历value字段。当我尝试时出现错误,因为cursor.hasNext不是一个函数。

 db.regRecord.find({ "_id" : "13f2ad1f-14c0-42f3-bc7e-a282a559c4f6" }).pretty();
        {
            "_id" : "13f2ad1f-14c0-42f3-bc7e-a282a559c4f6",

            "entries" : [
                {
                    "formId" : "556e3156-d2f1-4c78-a719-4b67ee71c5a1",
                    "value" : [
                        {
                            "termId" : "b987cc9b-433c-4463-835c-b776c4c1cc04",

                            "_class" : "111111111"
                        }
                    ]
                },
                {
                    "formId" : "556e3156-d2f1-4c78-a719-4b67ee71c5a1",
                    "value" : [
                        {
                            "termId" : "b987cc9b-433c-4463-835c-b776c4c1c454",

                            "_class" : "45454545"
                        }
                    ]
                },
            ],

        }

我写了下面的脚本进行更新,但是不起作用。该脚本仅更新集合的第一个节点,它不会遍历entrys数组的nest value字段。

     db.regRecord.find({ "entries" : { $type:"object"}).forEach(function(doc){
            printjson("Current Document ID -"+doc._id);
            doc.entries.forEach(function(p){
                            if (p.value instanceof Object) {   
                                db.regRecord.update(
                                    {_id: doc_id   ,"entries.formId":p.formId},
                                    {$set:{"entries.$.value._class":"ABCCCCC"}}
                                );
                            }
            });
     });

0 个答案:

没有答案