I have this example MongoDB entry in a users
DB:
{ _id: xxx, name: "name", files:[{ fileName: "test", size: 654 }, {fileName: "test2", size: 50 }] }
And I’m using Pymongo to query the file named “test”:
users.find_one({'files.filename':"test"})
How can I limit the output from Pymongo, so it only gives me the dict
where “test” is contained? In other words, I want it to output this:
{ fileName: "test", size: 654 }
Advertisement
Answer
Here’s one way you could do it.
db.users.aggregate([ { "$match": { "files.fileName": "test" } }, { "$replaceWith": { "$first": { "$filter": { "input": "$files", "as": "file", "cond": { "$eq": ["$$file.fileName", "test"] } } } } } ])
Try it on mongoplayground.net.