首页 > 解决方案 > 查找具有特定字段内容的用户文档

问题描述

我有一些文件看起来像:

{
    "_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_idas12different 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

标签: pythonmongodbpymongo

解决方案


您可以使用运算符进行过滤$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']}})

推荐阅读