MongoTemplate删除子元素的子元素

Document结构:

{
    "id" : "123",
    "data" : "[{
        "cid" : "abc",
        "value" : "[
            {
                "vid" : "v123",
                "view" : "abcd"
            }
        ]"
    }]"
}

求教怎么删除value中的元素?

阅读 660
评论 2019-12-31 提问
    1 个回答

    这里是一段python的代码,可以删除value中的元素

    from pymongo import MongoClient
    
    # 连接MongoDB
    client = MongoClient(host='192.168.1.103', port=27017)
    test_collection = client.get_database('demo').get_collection('test')
    
    # 清空test collection
    test_collection.drop()
    
    # 新增一条测试数据
    ins_result = test_collection.insert_one({
        "id": "123",
        "data": [{
            "cid": "110",
            "value": [
                {
                    "vid": "1",
                    "view": "100"
                },
                {
                    "vid": "2",
                    "view": "101"
                }
            ]
        }]
    })
    
    # 查询出所有数据
    all = test_collection.find()
    for data in all:
        print(data)
    
    # 更新数据
    test_collection.update_one(
        {'id': '123'},
        {'$pull': {'data.$[].value': {'vid': '1'}}}
    )
    
    # 再次查询,数据已更新
    all = test_collection.find()
    for data in all:
        print(data)

    输出:

    {'_id': ObjectId('5e0b6e688ceecd4e924107c7'), 'id': '123', 'data': [{'cid': '110', 'value': [{'vid': '1', 'view': '100'}, {'vid': '2', 'view': '101'}]}]}
    {'_id': ObjectId('5e0b6e688ceecd4e924107c7'), 'id': '123', 'data': [{'cid': '110', 'value': [{'vid': '2', 'view': '101'}]}]}

    相信有了这段代码,你能很简单翻译成Java,用MongoTemplate可以很简单的实现,没有用Java是因为写一个示例,用Java还是有一点罗嗦的(Java对不起,哈哈)

    参考的文档:

    1. $pull说明
    2. $[]说明
    3. Mongo Array的操作
    评论 赞赏 2019-12-31
      撰写回答

      登录后参与交流、获取后续更新提醒

      MongoDB 技术问答
      合作问答

      MongoDB 官方中文社区 和 SegmentFault 联合推出的 MongoDB 技术交流平台。 这是一个以社区力量为主,但...