Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Truy vấn MongoDB khớp mảng bất kể thứ tự phần tử

Toán tử $all chọn tài liệu mà trường mảng chứa tất cả các phần tử chỉ định, bất kể thứ tự.

Tạo collection với mảng đối tượng:

> db.demo370.insertOne({
  "Name" : "Chris",
  "details" : [
    { "Subject" : "MySQL", "CountryName" : "US" },
    { "Subject" : "MongoDB", "CountryName" : "UK" }
  ]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e57e9892ae06a1609a00af0") }
> db.demo370.insertOne({
  "Name" : "David",
  "details" : [
    { "Subject" : "Java", "CountryName" : "AUS" },
    { "Subject" : "Spring", "CountryName" : "UK" }
  ]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e57e9972ae06a1609a00af1") }

Xem dữ liệu:

> db.demo370.find();
{ "_id" : ObjectId("5e57e9892ae06a1609a00af0"), "Name" : "Chris", "details" : [ { "Subject" : "MySQL", "CountryName" : "US" }, { "Subject" : "MongoDB", "CountryName" : "UK" } ] }
{ "_id" : ObjectId("5e57e9972ae06a1609a00af1"), "Name" : "David", "details" : [ { "Subject" : "Java", "CountryName" : "AUS" }, { "Subject" : "Spring", "CountryName" : "UK" } ] }

Tìm tài liệu có mảng details chứa CẢ HAI đối tượng chỉ định (thứ tự không quan trọng):

> db.demo370.find({
  details: {$all: [
    {Subject:"MySQL","CountryName" : "US"},
    {Subject:"MongoDB", "CountryName" : "UK"}
  ]}})

Kết quả (chỉ Chris):

{ "_id" : ObjectId("5e57e9892ae06a1609a00af0"), "Name" : "Chris", "details" : [ { "Subject" : "MySQL", "CountryName" : "US" }, { "Subject" : "MongoDB", "CountryName" : "UK" } ] }

Điểm quan trọng: $all với đối tượng yêu cầu khớp chính xác toàn bộ đối tượng (tất cả cặp key-value). Nếu chỉ muốn khớp một số trường, hãy dùng $elemMatch kết hợp $all hoặc aggregation.