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

So sánh hai trường trong aggregation filter MongoDB

Sử dụng $filter trong $project để lọc phần tử trong mảng dựa trên so sánh với trường khác của document.

Tạo collection demo137:

> db.demo137.insertOne({
   Name1:"Chris", Name2:"David",
   Detail1:[{_id:"John",Name3:"Chris"},{_id:"Chris",Name3:"Chris"}],
   Detail2:[{_id:"David",Name3:"Chris"},{_id:"Carol",Name3:"Chris"},{_id:"John",Name3:"Chris"}]
});

Pipeline: filter Detail1 giữ phần tử _id = Name1, filter Detail2 giữ _id = Name2:

> db.demo137.aggregate([
   {
      $project: {
         _id: 0, Name1: 1, Name2: 1,
         Detail1: {
            $filter: {
               input: "$Detail1",
               as: "out",
               cond: { $eq: ["$$out._id", "$Name1"] }
            }
         },
         Detail2: {
            $filter: {
               input: "$Detail2",
               as: "out",
               cond: { $eq: ["$$out._id", "$Name2"] }
            }
         }
      }
   }
])

Kết quả chỉ giữ subdocument khớp:

{
   "Name1" : "Chris",
   "Name2" : "David",
   "Detail1" : [{"_id":"Chris","Name3":"Chris"}],
   "Detail2" : [{"_id":"David","Name3":"Chris"}]
}