MongoTemplate删除子元素的子元素

Document结构:

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

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

阅读 3.8k
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的操作
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题