桑小一 2014-12-17 09:15 采纳率: 0%
浏览 1127

mongodb两层内嵌式数组怎么修改制定最内层的一个属性的值

{
"_id" : ObjectId("549127427d3201f5086a711d"),
"_class" : "cn.togym.entity.SitePrice",
"siteId" : NumberLong(1122),
"date" : "2014.3.10",
"siteSlice" : [{
"sliceId" : 0,
"sliceName" : "场馆一",
"sliceIntroduction" : "阿斯达克减肥哈离开时记得发货了空间",
"siteSliceDetail" : [{
"SiteSliceDetailId" : 0,
"startTime" : "08:00",
"endTime" : "09:00",
"price" : 100.0,
"occupy" : 0
}, {
"SiteSliceDetailId" : 1,
"startTime" : "09:00",
"endTime" : "10:00",
"price" : 100.0,
"occupy" : 0
}, {
"SiteSliceDetailId" : 2,
"startTime" : "10:00",
"endTime" : "11:00",
"price" : 100.0,
"occupy" : 0
}]
}, {
"sliceId" : 1,
"sliceName" : "场馆一",
"sliceIntroduction" : "阿斯达克减肥哈离开时记得发货了空间",
"siteSliceDetail" : [{
"SiteSliceDetailId" : 0,
"startTime" : "08:00",
"endTime" : "09:00",
"price" : 100.0,
"occupy" : 0
}, {
"SiteSliceDetailId" : 1,
"startTime" : "09:00",
"endTime" : "10:00",
"price" : 100.0,
"occupy" : 0
}, {
"SiteSliceDetailId" : 2,
"startTime" : "10:00",
"endTime" : "11:00",
"price" : 100.0,
"occupy" : 0
}]
},
}],
"dateType" : "新年"
}
怎么修改sliceId=1并且startTime=08:00内的occupy的值。不知道他在数组内的下标

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-03 04:27
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    要修改指定内层数组中特定元素的值,你需要遍历数组并找到匹配的元素,然后更新它。在MongoDB中,你可以使用findAndModify方法来实现这一目标。

    以下是一个示例:

    // 创建一个数组
    List<Map<String, Object>> sliceArray = new ArrayList<>();
    sliceArray.add(new HashMap<String, Object>() {{
        put("sliceId", 1);
        put("sliceName", "场馆一");
        put("sliceIntroduction", "阿斯达克减肥哈离开时记得发货了空间");
        put("siteSliceDetail", new ArrayList<>());
        put("siteSliceDetail", Arrays.asList(
            new HashMap<String, Object>() {{
                put("SiteSliceDetailId", 0);
                put("startTime", "08:00");
                put("endTime", "09:00");
                put("price", 100.0);
                put("occupy", 0);
            }},
            new HashMap<String, Object>() {{
                put("SiteSliceDetailId", 1);
                put("startTime", "09:00");
                put("endTime", "10:00");
                put("price", 100.0);
                put("occupy", 0);
            }},
            new HashMap<String, Object>() {{
                put("SiteSliceDetailId", 2);
                put("startTime", "10:00");
                put("endTime", "11:00");
                put("price", 100.0);
                put("occupy", 0);
            }}
        ));
    }});
    
    // 修改特定元素的值
    Map<String, Object> modifiedElement = new HashMap<>();
    modifiedElement.put("startTime", "08:00");
    
    mongoTemplate.findAndModify(sliceArray,
        findAndReplace(), 
        new Document("_id", new ObjectId("549127427d3201f5086a711d")), 
        new BasicDBObject("$set", modifiedElement),
        new BasicDBObject("$inc", new BasicDBObject("occupy", 1)));
    
    

    在这个例子中,我们首先创建了一个包含多个slice对象的数组。然后,我们找到了名为“场馆一”的slice对象,并将其作为查找条件。接下来,我们设置了新的开始时间,并将新值设置为occupy字段的当前值加1(因为我们要增加占有量)。最后,我们将这个操作应用到数据库中的文档上。

    注意:在实际的生产环境中,你可能需要处理更复杂的查询和错误情况。此外,这个示例假设你的数据结构是固定的,如果数据结构发生变化,你可能需要修改代码以适应新的结构。

    评论

报告相同问题?