Để tìm kiếm mảng các đối tượng trong MongoDB, bạn sử dụng phương thức find(). Phương thức này chọn các document trong collection hoặc view và trả về con trỏ đến các document được chọn.
Tạo collection với dữ liệu mẫu
> db.demo484.insertOne(
... { 'id' : 1, 'details' : [ { 'Name1' : 'Chris' }, { 'Name2' : 'David' }, { 'Name3' : 'Bob' } ] }
... );
{ "acknowledged" : true, "insertedId" : ObjectId("5e82e3a4b0f3fa88e22790a1") }
> db.demo484.insertOne(
... { 'id' : 1, 'details' : [ { 'Name1' : 'Chris' }, { 'Name2' : 'Carol' }, { 'Name3' : 'Bob' } ] }
... );
{ "acknowledged" : true, "insertedId" : ObjectId("5e82e3a4b0f3fa88e22790a2") }
> db.demo484.insertOne(
... { 'id' : 1, 'details' : [ { 'Name1' : 'Chris' }, { 'Name2' : 'Carol' }, { 'Name3' : 'Mike' } ] }
... );
{ "acknowledged" : true, "insertedId" : ObjectId("5e82e3a4b0f3fa88e22790a3") }
Hiển thị tất cả document
> db.demo484.find();
Kết quả trả về:
{
"_id" : ObjectId("5e82e3a4b0f3fa88e22790a1"),
"id" : 1,
"details" : [ { "Name1" : "Chris" }, { "Name2" : "David" }, { "Name3" : "Bob" } ]
}
{
"_id" : ObjectId("5e82e3a4b0f3fa88e22790a2"),
"id" : 1,
"details" : [ { "Name1" : "Chris" }, { "Name2" : "Carol" }, { "Name3" : "Bob" } ]
}
{
"_id" : ObjectId("5e82e3a4b0f3fa88e22790a3"),
"id" : 1,
"details" : [ { "Name1" : "Chris" }, { "Name2" : "Carol" }, { "Name3" : "Mike" } ]
}
Truy vấn tìm kiếm mảng đối tượng
Sử dụng toán tử $or để tìm các document thỏa mãn một trong các điều kiện:
> db.demo484.find(
... {$or: [
... {'details.Name2': 'Carol', 'details.Name3': 'Mike'},
... {'details.Name2': 'Carol', 'details.Name3': 'Bob'}
... ]}
... )
Kết quả:
{
"_id" : ObjectId("5e82e3a4b0f3fa88e22790a2"),
"id" : 1,
"details" : [ { "Name1" : "Chris" }, { "Name2" : "Carol" }, { "Name3" : "Bob" } ]
}
{
"_id" : ObjectId("5e82e3a4b0f3fa88e22790a3"),
"id" : 1,
"details" : [ { "Name1" : "Chris" }, { "Name2" : "Carol" }, { "Name3" : "Mike" } ]
}
Lưu ý: Khi truy vấn mảng đối tượng, MongoDB tự động so khớp các phần tử trong mảng. Cú pháp details.Name2 sẽ kiểm tra trường Name2 bên trong các đối tượng của mảng details.