python - 查找具有特定字段内容的用户文档
问题描述
我有一些文件看起来像:
{
"_id" : <object id>,
"user_id" : 1,
"country" : "NZ",
"file_name" : "hi.zip",
"extension" : "zip",
"mime_type" : "application/zip",
"size" : 226679,
"location" : "https://somecontainer.blob.core.windows.net/userdata/m/hh1/hi.zip"
}
我有两个用户user_id
as1
和2
different file_name
,我想做的是获取user_1: 1
然后file_name: ['hi.zip', 'hello.zip']
删除它。
目前我正在这样做:
for file_name in db.collection.find({'user_id': 3}):
if file_name['file_name'] in ['hi.zip', 'hello.zip']:
db.collection.delete_one({'_id': file_name['_id']})
有没有更多的MongoDB方式来做到这一点?
我试着做:
for file_name in db.collection.find({'user_id': 3}, {"_id": 1, 'location':1, "file_name": {'$elemMatch':{'$in':['hi.zip', 'hello.zip']}}}):
print(file_name)
这只是打印所有文件,我也试过$eq
。
解决方案
您可以使用运算符进行过滤$in
。Mongodb 将匹配其字段至少包含您要查找的数组中的一个元素的文档。看这里。所以你的查询将是这样的:
db.collection.find({user_id: 3, file_name: {$in: ['hi.zip', 'hello.zip']}})
甚至更好的是,您可以使用deleteMany()
mongodb 中的方法将它们全部删除。因此,您不必在代码中再次循环它。
db.collection.deleteMany({user_id: 3, file_name: {$in: ['hi.zip', 'hello.zip']}})
推荐阅读
- c# - 如何使用 Xbim 为 IFC 对象创建和操作 Table 属性?
- python - 当使用“mlflow models serve”提供模型时如何处理 MLflow 中的错误?
- javascript - Javascript数组过滤和映射
- dart - 解析 base64 API 响应会引发 FormatException
- reactjs - 如何将多个 sagas 合并到 rootSaga 中?
- java - JPA:JPA 在搜索 id 之前是否修剪字符串
- ios - 每日多次本地通知 swift
- django - 从另一个模型访问对象 - Django
- arrays - 在powershell中转换逗号分隔的数组值
- ruby - 在垃圾收集之前删除 Ruby 中的临时文件