Computer >> Máy Tính >  >> Lập trình >> MongoDB

Thực hiện tra cứu $ đối với mảng id đối tượng trong MongoDB?

Đối với điều này, hãy sử dụng $ lookup. Thao tác này thực hiện một phép nối bên ngoài bên trái với một bộ sưu tập chưa được cứng trong cùng một cơ sở dữ liệu để lọc các tài liệu từ bộ sưu tập “đã kết hợp” để xử lý.

Trước tiên, hãy để chúng tôi tạo một bộ sưu tập với các tài liệu -

> db.demo395.insertOne({Name:"Chris"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e5e782317aa3ef9ab8ab207")
}
> db.demo395.insertOne({Name:"David"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e5e782317aa3ef9ab8ab208")
}

Hiển thị tất cả các tài liệu từ một bộ sưu tập với sự trợ giúp của phương thức find () -

> db.demo395.find();

Điều này sẽ tạo ra kết quả sau -

{ "_id" : ObjectId("5e5e782317aa3ef9ab8ab207"), "Name" : "Chris" }
{ "_id" : ObjectId("5e5e782317aa3ef9ab8ab208"), "Name" : "David" }

Hãy để chúng tôi tạo bộ sưu tập thứ hai với các tài liệu -

> db.demo396.insertOne({"details" : [
...    ObjectId("5e5e782317aa3ef9ab8ab207"),
...    ObjectId("5e5e782317aa3ef9ab8ab208")
...    ]
... }
... )
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e5e787817aa3ef9ab8ab209")
}

Hiển thị tất cả các tài liệu từ một bộ sưu tập với sự trợ giúp của phương thức find () -

> db.demo396.find();

Điều này sẽ tạo ra kết quả sau -

{ "_id" : ObjectId("5e5e787817aa3ef9ab8ab209"), "details" : [
ObjectId("5e5e782317aa3ef9ab8ab207"), ObjectId("5e5e782317aa3ef9ab8ab208") ] }

Sau đây là truy vấn để thực hiện $ lookup đối với mảng id của đối tượng -

> db.demo396.aggregate([
...    { "$lookup": {
...       "from": "demo395",
...       "let": { "details": "$details" },
...       "pipeline": [
...          { "$match": { "$expr": { "$in": [ "$_id", "$$details" ] } } }
...       ],
...       "as": "output"
...    }}
... ])

Điều này sẽ tạo ra kết quả sau -

{ "_id" : ObjectId("5e5e787817aa3ef9ab8ab209"), "details" : [ ObjectId("5e5e782317aa3ef9ab8ab207"), ObjectId("5e5e782317aa3ef9ab8ab208") ], "output" : [ { "_id" : ObjectId("5e5e782317aa3ef9ab8ab207"), "Name" : "Chris" }, { "_id" : ObjectId("5e5e782317aa3ef9ab8ab208"), "Name" : "David" } ] }