mongodb - MongoDB:删除位置
问题描述
在 MongoDB 控制台中,如何删除列表大小大于 3 的字段(键)?这是我的 json 文档示例:
[{
"_id": {
"$oid": "5e52d5d665a51b1952871b4b"
},
"domains": {
"youtube_com_": [
"10.0.0.6",
"10.0.0.3",
"10.0.0.7"
],
"imrworldwide_com_": [
"10.0.0.2",
"10.0.0.10",
"10.0.0.4"
],
"adadvisor_net_": [
"10.0.0.3"
],
"scorecardresearch_com_": [
"10.0.0.2"
],
"adnxs_com_": [
"10.0.0.2",
"10.0.0.3",
"10.0.0.7",
"10.0.0.6",
"10.0.0.9"
],
"doubleclick_net_": [
"10.0.0.8",
"10.0.0.7"
],........
在字段 (key)domains
中,对于每个域名,检查 IP 地址的数量是否小于 3。如果是,则删除该域。
解决方案
您可以使用复杂的聚合查询,但这是我更喜欢 pymongo 的地方,因为它(恕我直言)更清晰:
records = db.mycollection.find()
for record in records:
domains = record.get('domains')
for domain in domains.copy():
ips = domains.get(domain)
if len(ips) <3:
record['domains'].pop(domain)
db.mycollection.replace_one({'_id': record['_id']}, record, upsert=True)
pprint.pprint(db.mycollection.find_one({}))
这将删除任何少于 3 个条目的域(if len(ips) <3
根据需要调整逻辑):
{'_id': ObjectId('5e530f9277fa4a34f9c5c2be'),
'domains': {'adnxs_com_': ['10.0.0.2',
'10.0.0.3',
'10.0.0.7',
'10.0.0.6',
'10.0.0.9'],
'imrworldwide_com_': ['10.0.0.2', '10.0.0.10', '10.0.0.4'],
'youtube_com_': ['10.0.0.6', '10.0.0.3', '10.0.0.7']}}
推荐阅读
- scala - 相当于纯akka流中的balancer、广播和合并
- reactjs - React Styled Components 生成过多的 css
- html - 放大页面时标题和文本隐藏在我的滑块后面
- r - lme4 用于多元混合模型 - 永远不会收敛/完成执行
- java - 在 Itext 报告中使用 PdfPTable 时未显示数据
- android - iOS 中的 AlarmManager 替代品
- asp.net - 无法返回employeeType,但我可以获取displayName
- python - 无法在产品页面中找到链接
- sql - SQL:仅当多个值是 CatalogTable 中的 IN 1 列时才选择
- typescript - 当组件具有非法类型时,使用 TypeScript 创建 React App 中的 Storybook 仍然可以编译