Với khung tổng hợp, nó có thể trông giống như vậy
db.getCollection('yourCollection').aggregate([
{
$unwind: '$arr'
},
{
$match: {
$or: [
{ 'arr.name': /world/i },
{ 'arr.description': /world/i }
]
}
},
{
$project: {
_id: '$arr._id',
name: '$arr.name',
description: '$arr.description'
}
}
])
điều này sẽ dẫn đến kết quả sau cho dữ liệu mẫu của bạn:
{
"_id" : 1,
"name" : "Random",
"description" : "Hello world"
}
{
"_id" : 2,
"name" : "World",
"description" : "This is a random description"
}
Nếu bạn cần một mảng duy nhất với các tài liệu kết quả như được hiển thị trong câu hỏi của mình, bạn có thể chỉ cần chuỗi toArray()
gọi ở cuối đường dẫn - hãy nhớ rằng điều này có thể làm tăng mức tiêu thụ bộ nhớ trong trường hợp tập hợp kết quả lớn như được chỉ ra bởi SSDMS
trong phần bình luận.