Mongodb更新另一个数组内的数组内的值

时间:2020-01-27 15:12:01

标签: javascript mongodb

我需要更新所有文档,其中另一个数组(“ days.Hour”)中的一个数组的值是“ 08h”到“ 8”。

{
"_id" : ObjectId("5bbd1396197aa5389cb7bfb7"),
"days" : [ 
    {
        "Day" : "Saturday",
        "Hour" : [ 
            "08h", 
            "10h"
        ]
    }, 
    {
        "Day" : "Sunday",
        "Hour" : [ 
            "08h", 
            "10h"
        ]
    }
],
"name" : "Guilherme",
"isActive" : true,
"gender" : "male"
}

我尝试过一次学习,但没有成功:

myCollection.find({}).forEach(function(doc){
        doc.days.forEach(function(day){
            day.Hour.forEach(function(hour){
                hour = hour.replace("h", "");                
                print(hour);
            })
        })
        // Here I can replace the document, but the document doesn't contain my replace
        print(doc);
})

2 个答案:

答案 0 :(得分:0)

尝试一下

public class Order
    {
        [Key]
        public int OrderId { get; set; }

        public string Date { get; set; }

        public string Title { get; set; }

        public string Supplier { get; set; }

        public string Projekt { get; set; }

        public string Department { get; set; }

        public string Description { get; set; }

        public int Price { get; set; }

        public bool Approval { get; set; }

        public bool Payment { get; set; }

    }

答案 1 :(得分:0)

不是首选,而是使用代码处理数据并以n个文档的形式写回数据,您实际上可以尝试以下查询:

myCollection.updateMany({
}, { $set: { "days.$[].Hour.$[eachHour]": '8h' } }, {
    arrayFilters: [{ 'eachHour': '08h' }]
})

收集数据:

/* 1 */
{
    "_id" : ObjectId("5bbd1396197aa5389cb7bfb7"),
    "days" : [ 
        {
            "Day" : "Saturday",
            "Hour" : [ 
                "08h", 
                "10h"
            ]
        }, 
        {
            "Day" : "Sunday",
            "Hour" : [ 
                "08h", 
                "10h"
            ]
        }
    ],
    "name" : "Guilherme",
    "isActive" : true,
    "gender" : "male"
}

/* 2 */
{
    "_id" : ObjectId("5e2f085ad02e05b69487f2b3"),
    "days" : [ 
        {
            "Day" : "Saturday",
            "Hour" : [ 
                "18h", 
                "10h"
            ]
        }, 
        {
            "Day" : "Sunday",
            "Hour" : [ 
                "08h", 
                "10h"
            ]
        }
    ],
    "name" : "Guilherme2",
    "isActive" : true,
    "gender" : "male"
}

/* 3 */
{
    "_id" : ObjectId("5e2f0865d02e05b69487f3a0"),
    "days" : [ 
        {
            "Day" : "Saturday",
            "Hour" : [ 
                "18h", 
                "10h"
            ]
        }, 
        {
            "Day" : "Sunday",
            "Hour" : [ 
                "18h", 
                "10h"
            ]
        }
    ],
    "name" : "Guilherme3",
    "isActive" : true,
    "gender" : "male"
}

结果:

/* 1 */
{
    "_id" : ObjectId("5bbd1396197aa5389cb7bfb7"),
    "days" : [ 
        {
            "Day" : "Saturday",
            "Hour" : [ 
                "8h", 
                "10h"
            ]
        }, 
        {
            "Day" : "Sunday",
            "Hour" : [ 
                "8h", 
                "10h"
            ]
        }
    ],
    "name" : "Guilherme",
    "isActive" : true,
    "gender" : "male"
}

/* 2 */
{
    "_id" : ObjectId("5e2f085ad02e05b69487f2b3"),
    "days" : [ 
        {
            "Day" : "Saturday",
            "Hour" : [ 
                "18h", 
                "10h"
            ]
        }, 
        {
            "Day" : "Sunday",
            "Hour" : [ 
                "8h", 
                "10h"
            ]
        }
    ],
    "name" : "Guilherme2",
    "isActive" : true,
    "gender" : "male"
}

/* 3 */
{
    "_id" : ObjectId("5e2f0865d02e05b69487f3a0"),
    "days" : [ 
        {
            "Day" : "Saturday",
            "Hour" : [ 
                "18h", 
                "10h"
            ]
        }, 
        {
            "Day" : "Sunday",
            "Hour" : [ 
                "18h", 
                "10h"
            ]
        }
    ],
    "name" : "Guilherme3",
    "isActive" : true,
    "gender" : "male"
}

它将更新两个文档。

参考: .updateMany()-arrayFilters

相关问题